0

ビューをマップするために、CodeFirstからDatabaseFirstに移動しています。私のCodeFirstアプローチでは、次のような基本エンティティがありました。

public abstract class BaseEntity
{
    /// <summary>
    /// Gets or sets the entity identifier
    /// </summary>
    public virtual int Id { get; set; }
... // Some more methods here for equality checking
}

すべてのクラスにIDがあるため、すべてのクラスをこの基本クラスから派生させました。そこで、このBaseClassを使用して汎用リポジトリを作成しました。私のリポジトリは次のようになります。

public partial class EfRepository<T> where T : BaseEntity
{
    public readonly DemirbasContext context;
    private DbSet<T> _entities;

    /// <summary>
    /// Ctor
    /// </summary>
    /// <param name="context">Object context</param>
    public EfRepository(DemirbasContext context)
    {
        this.context = context;
    }

    public T GetById(object id)
    {
        return this.Entities.Find(id);
    }

    public void Insert(T entity)
    {
        try
        {
            if (entity == null)
                throw new ArgumentNullException("entity");

            this.Entities.Add(entity);

            this.context.SaveChanges();
        }
        catch (Exception e)
        {
        ...
        }
    }
    // Other methods here Update, Delete etc

だから、このようにジェネリック型のパラメーターを指定するだけでリポジトリを作成することができました

EfRepository<Car> carRepo = new EfRepository<Car>();

DatabaseFirstでは、基本クラスからエンティティクラスを派生させることはできません。それを行う方法はありますか、それともあなたの提案は何ですか?

4

1 に答える 1

0

おっと、コード ジェネレーターを見逃していました。

データ モデル (.EDM ファイル) を右クリックし、[コード生成項目の追加] をクリックします。DbContext を選択します (簡素化された DbContext API 用)。

これにより、拡張子が .tt の 2 つのファイルが作成されます。1 つはコンテキスト用、もう 1 つはエンティティ用です。ファイルを展開すると、.tt ファイルにすべてのクラスが含まれていることがわかります。

必要に応じて変更できます。

于 2012-07-31T08:16:33.490 に答える