在我的ASP.NET MVC 3应用程序中,我现在将EF4.3用作ORM框架。我希望将来有能力替换它,以备我需要。这需要定义一个接口,在EF的情况下将指向DbContext实现。
我在界面中为可查询对象定义了什么?
例如在我的情况下,我会做以下事情,但不知道这是否是正确的方法:
在我的界面中:
IQueryable<AnonymousUser> AnonymousUsers { get; }
int SaveChanges();
在我的DbContext中:
public DbSet<AnonymousUser> AnonymousUsers { get; set; }
IQueryable<AnonymousUser> IThoughtCatStorage.AnonymousUsers
{
get { return AnonymousUsers; }
}
如您所见,使用IQueryable是抽象DbSets的一种方法。
这是最好的方法吗? (我知道这听起来像讨论一样,但我只是想知道目前是否有更通用的方法来定义ORM访问接口。)
答案 0 :(得分:1)
我过去写过一篇关于这篇文章的博文:
答案 1 :(得分:1)
不要在任何地方使用你的OR / M.使用存储库类抽象出OR / M,并使代码的单元测试更容易。它还消除了代码重复,并使将来更容易维护代码。
您的好处是,如果您将来需要切换OR / M,则只需更改存储库类。
不要忘记我们都选择了一个OR / M是因为某个原因(你最喜欢的OR / M有的功能)。通过抽象出通用OR / M层后面的OR / M,您也可以删除使用这些功能的可能性。