在程序集中排列 VS2008 生成的 LinqToSql/EntityFramework 数据模型/上下文

发布于 2024-08-29 17:32:03 字数 269 浏览 4 评论 0原文

如果 VS2008 生成 L2 或 EF 数据模型,我应该使用什么模式进行数据访问?存储库模式还是什么?

我们知道VS2008在同一个文件中生成Data-Models和DataContexts/ObjectContexts,那么,我应该如何在VS2008解决方案中安排VS2008程序集以实现分层设计?

如果我使用存储库模式,我应该如何在 VS2008 解决方案中安排我的程序集(因为数据模型和数据/对象上下文存储在同一个文件中......)?

任何网络/示例链接将不胜感激。

What pattern should I use for data-access in case of VS2008 generated L2s or EF DataModels? Repository-pattern or what?

As we know VS2008 generates Data-Models and DataContexts/ObjectContexts in the same file, then, how should I arrange my VS2008 assemblies in my VS2008 solution to achieve a layered design?

If I use repository pattern, how should I arrange my assemblies in the VS2008 solution (as Data-Models and Data/Object-Contexts are stored in the same file...)?

Any web/example link would be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

避讳 2024-09-05 17:32:03

我所做的是将(在我的例子中为 Linq2Sql)包装在我自己的自定义类中,该类实现了存储库模式,这是从之前但有些相关的答案中粘贴的摘录。

我建议通读 洋葱架构 并查看MVC StoreFront 视频获取灵感。神奇的部分是,将 Linq2Sql 部分或 EF 内容推到一侧,这样您就不必坐在它上面,如果需要,可以将其拉入,这样您就可以使用 Linq2Sql 或 EF 或 NHibernate。这是更多的工作,但给你带来了更多的灵活性。

这是我的示例 CarProject

在 Car.Core 项目中

 public interface ICarRepository
 {
    IQueryable<Car> GetAllCars();
    void Add(Car);
 }

,我有一个接口的实现,它包装了对生成的 Linq2Sql 类的访问。

Car.Data 项目

public class SqlCarRepository : ICarRepository
{
    private CarDataContext _context;

    public SqlCarRepository()
    {
        _context = new CarDataContext();
    }

    #region ICarRepository Members

    public IQueryable<Car> GetAllCars()
    {
        return _context.Cars;
    }

当然,您可以有一个等效的 EF,或者 NHibernate。

我还没有完全整理好所有这些,我仍在学习,但我目前有这些项目:

Car.Core         --- All the interfaces and domain objects, DTO's etc
Car.Core.Tests   --- The tests of the core business logic.
Car.Web          --- Asp.net MVC frontend
Car.Web.Tests    --- Tests for the website
Car.Data         --- The Linq2Sql stuff lives in here
Car.Data.Tests   --- The tests for the DAL layer

在您的场景中,您可以将 EF 放入 Car.Data 中,也可以将其更改为 Car.Linq2Sql 和 Car.EntityFramework。不确定我会做什么。

What I've done is to wrap (in my case Linq2Sql) in my own custom class, which implements the repository pattern, here's the pasted excerpt from a previous but somewhat related answer.

I'd recommend reading through The Onion Architecture and looking at the MVC StoreFront videos for inspiration. The magic part is, pushing the Linq2Sql part or EF stuff to one side, So you don't sit on top of it as much as, Pull it in if you want it, that way you could use Linq2Sql or EF or NHibernate. This is more work, but gives you more flexibility.

Here's my example CarProject

In Car.Core project

 public interface ICarRepository
 {
    IQueryable<Car> GetAllCars();
    void Add(Car);
 }

I then have a implementation of the interface which wraps up access to the generated Linq2Sql class.

Car.Data project

public class SqlCarRepository : ICarRepository
{
    private CarDataContext _context;

    public SqlCarRepository()
    {
        _context = new CarDataContext();
    }

    #region ICarRepository Members

    public IQueryable<Car> GetAllCars()
    {
        return _context.Cars;
    }

You could have a EF equivilent ofcourse, or NHibernate.

I haven't got all this completely sorted, and I'm still learning but I currently have these projects:

Car.Core         --- All the interfaces and domain objects, DTO's etc
Car.Core.Tests   --- The tests of the core business logic.
Car.Web          --- Asp.net MVC frontend
Car.Web.Tests    --- Tests for the website
Car.Data         --- The Linq2Sql stuff lives in here
Car.Data.Tests   --- The tests for the DAL layer

In your scenario you could either put EF in Car.Data or maybe change it to Car.Linq2Sql and Car.EntityFramework. Not sure what I'd do.

戏舞 2024-09-05 17:32:03

在我的实体框架项目中,我保留了所有自动生成的代码,并扩展了一些自动生成的部分类以获得更具体的功能(我有时将自动生成的类的对象转换为我的项目类)。

我认为模型和它的一些扩展应该在一个程序集中。您可以拥有不同的类,以不同的方式保存数据 - 并且它们应该位于 DataModel 程序集将引用的不同程序集中。

也许我没有看到这个问题的正确之处。如果您愿意,请尝试进一步解释您想要实现的目标。

In my Entity Framework project, I've kept all the auto generated code as it is, and extended some of the auto generated partial classes for more specific functionality (I sometimes convert the object of the auto generated classes to my project classes).

I think the model and some of your extensions to it should be in one assembly. You can have different classes that will hold the data in a different way - and they should be in a different assembly that the DataModel assembly will reference.

Perhaps I don't see the question right. If you want, try and further explain what you're trying to achieve.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文