在我的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