我做什麼是我自己的自定義類,它實現了存儲庫模式包裝(在我的情況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