2

我最近开始自学 C# 和 Asp.net。我正在尝试构建一个简单的博客应用程序。我对存储库模式的使用感到困惑。我看过很少的教程,并且实现方式各不相同。

对于我的博客应用程序,我有两个数据库表(模型)——博客和评论。目前,我有一个如下所示的 IDbContext:

    public interface IDBContext
    {
        IQueryable<Blog> FindAllBlogs();
        IQueryable<Blog> FindBlogsInMonth(int month);
        Blog GetBlog(int id);
        void Add(Blog blog);
        void Update(Blog blog);
        void Delete(Blog blog);

        void Add(Comment comment);
        //void Remove(Comment comment);
    }

我有如下所示的存储库:

    public class BlogRepository : IDBContext
    {
        private BlogDb db = new BlogDb();

        public IQueryable<Blog> FindAllBlogs()
        {
            return db.Blogs.OrderByDescending(b => b.PublishDate);
        }

        public Blog GetBlog(int id)
        {
            return db.Blogs.Single(b => b.BlogID == id);
        }
...
}

存储库模式的另一个实现是这样的:

public interface IDbContext
{
    IQueryable<Blog> Blogs { get; }
    IQueryable<Comments> Comments { get; }
    int SaveChanges();
    T Attach<T>(T entity) where T : class;
    T Add<T>(T entity) where T : class;
    T Delete<T>(T entity) where T : class;
}

它调用存储库,并且有单独的查询类。

最好的方法是什么?

4

1 回答 1

3

最简单的方法是直接使用实体框架,尤其是实体框架 4.1 及更高版本中出现的新 DbContext 功能。

上下文将包含 DbSet 属性 - 每个属性都是存储库模式的实现,可实现上述所有目标。如果需要单元测试支持,可以使用 IDbSet。

我在网上看到了很多关于 ASP.NET MVC 存储库模式的演示,这些演示最终用自定义存储库包装了实体框架。这是浪费时间 - 它是包装其他代码的代码,除了增加不必要的复杂性之外没有任何直接目的。

于 2012-07-01T01:02:21.537 回答