1

我应该在的情况下使用什么样的模式进行数据访问的VS2008生成的L2S或EF DataModels?存储库模式还是什么?我们知道VS2008在同一个文件中生成Data-Models和DataContexts/ObjectContexts,那么,我应该如何安排我的VS2008程序集来实现分层设计?安排VS2008生成组件LinqToSql /的EntityFramework数据模型/上下文

如果我使用存储库模式,我应该怎么安排我在VS2008的解决方案组件(如数据模型和数据/对象上下文被存储在同一个文件)?

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

回答

1

我做什么是我自己的自定义类,它实现了存储库模式包装(在我的情况LINQ2SQL),这里是从以前的,但有些相关答案粘贴的摘录。

我建议通过The Onion Architecture阅读和寻找灵感的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 equivilent ofcourse,或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。不知道我会怎么做。

1

在我的实体框架的项目,我已经把所有的自动生成的代码,因为它是和扩展一些自动生成更具体的功能部分类(我有时转换自动的对象生成的类来我的项目类)。

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

也许我没有看到正确的问题。如果你想,尝试并进一步解释你想达到的目标。

+0

如果我想我的C#程序集分成3层(数据访问,POCO和UI,但是还是你喜欢它),实体框架的自动生成的模型带不来太多的帮助。 Coz,模型和数据访问代码驻留在同一个地方。那么你的答案是什么?如果您了解NHibernare,您可以了解到,NHibernate强烈支持存储库模式,通过它可以非常容易地将应用程序分成三层。如果EF的自动生成代码的情况下,我可以找到没有明确的方式来使用Repository模式。或者,如果你喜欢,你可以为我推荐任何其他DA模式。 – anonymous 2010-05-09 08:43:27

+0

您可以将实体框架的自动生成视为DataAccess,编写一个不同的程序集,该程序集将包含用于UI的POCO零件和一个不同的程序集。 您不必将自动生成的类视为您的POCO。请记住,它们通常不会完全符合您的程序所需,因为它们太自动。 – brickner 2010-05-09 12:13:52