不使用Code First时的良好通用存储库模式

时间:2012-12-02 19:59:04

标签: c# .net entity-framework repository repository-pattern

我正在尝试围绕我的ASP.NET MVC应用程序的存储库模式和依赖注入概念。

我浏览了文章Repository Pattern with Entity Framework,并且非常喜欢代码的简单性。似乎没有那么多代码,而且它们都是完全通用的。也就是说,数据库中的不同对象不需要多个存储库,因为大多数人似乎都在这样做。这正是我想要的。

但是,代码是为代码编写的,我不打算使用它。

问题:

  1. 为什么不能将相同的代码用于不首先使用代码的应用程序有充分的理由吗?
  2. 有人可以为我不首先使用代码的应用程序推荐更好的方法吗? (请记住,我绝对是以这种通用模式出售的。)
  3. 帮助我前进的其他任何提示?

2 个答案:

答案 0 :(得分:3)

您可以为任何底层数据存储创建存储库接口。你可以简单地定义一个这样的界面:

public interface IRepository
{
    IQueryable<T> GetQueryable<T>();

    void Insert<T>(T item);
}

然后,您可以在其后面实现一个实现它的类。它不必是代码优先的;例如,您可以使用从EDMX文件创建的ObjectContext来支持它。

这里的关键是创建正确的抽象。您可以使用界面轻松完成此操作,然后在幕后实现它。

因为您正在使用依赖注入,所以实现并不重要,只要您正确定义契约,实现(及其测试)应该很简单。如果它不起作用,或者你想要一个完全不同的数据存储,你只需告诉你的依赖注入器使用不同的实现,合同不会改变。

对于您创建的任何抽象,都可以这样说;你可以有一个读写数据的界面(就像你引用的文章那样),你只需要抽出抽象。

答案 1 :(得分:1)

看看这个。我认为这个链接对你有帮助

http://www.codeproject.com/Tips/572761/Generic-repository-pattern-using-EF-with-Dependenc

在此链接中,通用存储库模式与MVC项目中的依赖项注入一起使用,而不使用代码优先方法。