在VS2008生成的L2或EF DataModel的情况下,我应该使用什么模式进行数据访问?存储库模式还是什么?
我们知道VS2008会在同一个文件中生成Data-Models和DataContexts / ObjectContexts,那么,我应该如何在我的VS2008解决方案中安排我的VS2008程序集以实现分层设计?
如果我使用存储库模式,我应该如何在VS2008解决方案中安排我的程序集(因为数据模型和数据/对象上下文存储在同一个文件中......)?
任何网站/示例链接都将受到赞赏。
答案 0 :(得分:1)
在我的Entity Framework项目中,我保留了所有自动生成的代码,并扩展了一些自动生成的部分类以获得更具体的功能(我有时会将自动生成的类的对象转换为我的项目类)。
我认为模型和它的一些扩展应该在一个程序集中。您可以使用不同的类来以不同的方式保存数据 - 它们应该位于DataModel程序集将引用的不同程序集中。
也许我没有看到正确的问题。如果你愿意,可以尝试进一步解释你想要达到的目标。
答案 1 :(得分: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等效的课程,或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。不知道我会做什么。