在我的ASP.NET MVC 3應用程序中,我現在要使用EF4.3作爲ORM框架。我希望有能力在未來需要時替代它。這需要定義一個接口,在EF的情況下將指向DbContext實現。抽象出一個ORM提供者
我在界面中爲可查詢對象定義了什麼?
例如在我的情況,我要做到以下幾點,但不知道這是否是去一個正確的方法:
在我的接口:
IQueryable<AnonymousUser> AnonymousUsers { get; }
int SaveChanges();
在我的DbContext
:
public DbSet<AnonymousUser> AnonymousUsers { get; set; }
IQueryable<AnonymousUser> IThoughtCatStorage.AnonymousUsers
{
get { return AnonymousUsers; }
}
正如您所看到的,使用IQueryable是將DbSets抽象出來的一種方法。
這是最好的方法嗎? (我知道這聽起來頗爲討論,但我只想知道是否目前有一種更一般的方式來定義ORM訪問接口。)
這可能不是一個好主意:http://stackoverflow.com/questions/1699607/asp-mvc-repository-that-reflects-iqueryable-but-not-linq-to-sql-ddd-how-to- que/1699756#1699756 – 2012-02-16 13:23:25
抽象的價格可能會太高:http://ayende.com/blog/4567/the-false-myth-of-encapsulating-data-access-in-the-dal – 2012-02-16 13:34:33