0

現在、私のリポジトリは次のコードで構成されています。

public interface IRepository<T> where T : class
{
    T Get(int id);
    IQueryable<T> GetAll();
    IQueryable<T> Where(Expression<Func<T, bool>> predicate);
    IQueryable<T> Query();
    void Add(T entity);
    void Remove(T entity);
    void Save();
}

public class Repository<T> : IRepository<T> where T : class
    {
        private readonly IContextProvider  _ctxProvider;
        protected BaseModelContext _ctx
        {
            get
            {
                return _ctxProvider.DataContext;
            }
        }

        public Repository(IContextProvider ctx)
        {
            _ctxProvider = ctx;
        }

        public T Get(int id)
        {
            return _ctx.Set<T>().Find(id);
        }

        public IQueryable<T> GetAll()
        {
            return _ctx.Set<T>();
        }

        public IQueryable<T> Where(Expression<Func<T, bool>> predicate)
        {
            return _ctx.Set<T>().Where(predicate);
        }

        public void Add(T entity)
        {
            _ctx.Set<T>().Add(entity);
        }

        public void Remove(T entity)
        {            
            _ctx.Set<T>().Remove(entity);
        }

        public IQueryable<T> Query()
        {
            return _ctx.Set<T>().AsQueryable();
        }

        public IQueryable<T> Eager(string path)
        {
            return _ctx.Set<T>().Include(path);
        }

        public void Save()
        {
            _ctx.SaveChanges();
        }
    }

データベースからEDMXモデルを作成しましたが、_ctx.Setを使用して、クラスパターンごとのコードファーストテーブルに対してテンプレートを作成する場所に気づきました。Set()メソッドは、によって作成されたエンティティでは使用できません。生成された.edmxファイル。EFは2つのタイプを簡単に切り替えることができると思いました。EDMXモデルで動作するように、リポジトリクラスを書き直す必要がありますか?

4

1 に答える 1

0

デフォルトでは、モデルファーストおよびデータベースファーストアプローチの場合、VS2010はObjectContextベースのコンテキストおよびEntityObjectベースのエンティティを生成します。これはVS2012で変更され、デフォルトでPOCOエンティティとDbContextベースのコンテキストが生成されます。CodeFirstは、POCOエンティティとDbContextベースのコンテキストを使用します。これはVS2012に準拠していますが、VS2010には準拠していません。ただし、VS2010を使用しても、DbContextおよびPOCOエンティティを生成できます。まず、デザイナーサーフェスを右クリックし、プロパティでコード生成戦略をデフォルトからなしに変更します。次に、プロジェクトを右クリックして、「新しいアイテムを追加」します。左側の「オンライン」をクリックします。検索ダイアログにDbContextと入力できます。「EF4.xDbContextGenerator for C#」を選択します。これにより、プロジェクトにT4テンプレートが追加され、edmxファイルからDbContextベースのコンテキストとPOCOエンティティが生成されます。

于 2012-12-29T19:37:45.597 に答える