我做什么是我自己的自定义类,它实现了存储库模式包装(在我的情况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。不知道我会怎么做。
如果我想我的C#程序集分成3层(数据访问,POCO和UI,但是还是你喜欢它),实体框架的自动生成的模型带不来太多的帮助。 Coz,模型和数据访问代码驻留在同一个地方。那么你的答案是什么?如果您了解NHibernare,您可以了解到,NHibernate强烈支持存储库模式,通过它可以非常容易地将应用程序分成三层。如果EF的自动生成代码的情况下,我可以找到没有明确的方式来使用Repository模式。或者,如果你喜欢,你可以为我推荐任何其他DA模式。 – anonymous 2010-05-09 08:43:27
您可以将实体框架的自动生成视为DataAccess,编写一个不同的程序集,该程序集将包含用于UI的POCO零件和一个不同的程序集。 您不必将自动生成的类视为您的POCO。请记住,它们通常不会完全符合您的程序所需,因为它们太自动。 – brickner 2010-05-09 12:13:52