ビューをマップするために、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では、基本クラスからエンティティクラスを派生させることはできません。それを行う方法はありますか、それともあなたの提案は何ですか?