2

私は最近、C#とAsp.netを自分で教え始めました。簡単なブログアプリケーションを作成しようとしています。リポジトリパターンの使用法について混乱しています。私はいくつかのチュートリアルを見たことがあり、実装はさまざまです。

私のブログアプリケーションには、ブログとコメントの2つのデータベーステーブル(モデル)があります。現在、次のような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

最も簡単な方法は、Entity Framework を直接使用することです。特に、Entity Framework 4.1 以降で登場した新しい DbContext 機能を使用します。

コンテキストには DbSet プロパティが含まれます。各プロパティは、上記で説明したすべての目標を達成するリポジトリ パターンの実装です。単体テストのサポートが必要な場合は、IDbSet を使用できます。

Entity Framework をカスタム リポジトリでラップする ASP.NET MVC リポジトリ パターンのデモをオンラインでたくさん見てきました。これは時間の無駄です。これは他のコードをラップするコードであり、不必要な複雑さを追加する以外に直接的な目的には役立たないものです。

于 2012-07-01T01:02:21.537 に答える