带有POCO类的Entity Framework 4.0 - 存储库模式?

时间:2010-10-27 14:59:57

标签: asp.net-mvc-2 c#-4.0 entity-framework-4

我正在使用Entity Framework 4.0编写一个asp.net mvc 2 Web应用程序。我有应该显示项目,用于登录的视图等的视图。我应该使用存储库模式构建项目吗?如果有,怎么样?我应该为添加,更新,删除等基本方法创建一个接口,还是为登录验证等常用方法使用存储库的另一个类?

2 个答案:

答案 0 :(得分:3)

我使用EF和存储库模式, 保存 我做了很多工作!

小资源库模式简介:

someRepository.Find.Where(something => something.IsRed && something.IsBig)

创建一个名为'IRepository'的通用接口,其类型包含所有数据访问方法。

看起来像这样:

interface IRepository<T> where T : class
{
    IEnumerable<T> FindAll(Func<T, bool> exp);

    T FindSingle(Func<T, bool> exp);
}   

创建一个实现此接口的抽象“Repository”类:

class Repository<T> : IRepository<T> where T : class
{
    TestDataContext _dataContext = TestDataContext(); // Would be your EF Context

    public IEnumerable<T> FindAll(Func<T, bool> exp)
    {
        _dataContext.GetTable<T>().Where<T>(exp);
    }

    public T FindSingle(Func<T, bool> exp)
    {
        _dataContext.GetTable<T>().Single(exp);
    }
}

我们现在可以为实现我们的'IRepository'的something表/对象创建一个接口,并为扩展抽象'Repository'类和实现'ISomethingInterface'的具体类创建:

interface ISomethingRepository : IRepository<Banner>
{
}

以及实现它的匹配存储库:

class SeomthingRepository : Repository<Banner>, IBannerRepository
{
}

我建议使用这种方法,因为它为您提供了很大的灵活性以及足够的能力来控制您拥有的所有微小实体。

以这种方式调用这些方法非常简单:

SomethingRepository _repo = new SomethingRepository ();

_repo.Find.Where(something => something.IsRed && something.IsBig)

是的,这意味着您必须做一些工作,但以后更容易更改数据源。

希望它有所帮助!

答案 1 :(得分:2)

你可以得到最完整的答案:

http://huyrua.wordpress.com/2010/07/13/entity-framework-4-poco-repository-and-specification-pattern/

阅读和弄清楚了很多,但是如果你真的想要了解如何使用EF的存储库模式,那可能是最完整的来源。

可以在此处找到一些简单的示例代码来获取快速入门:

http://www.forkcan.com/viewcode/166/Generic-Entity-Framework-40-Base-Repository

您还可以找到不同的变体+讨论(例如,从存储库返回IQueryable's是否是个好主意等。