すべてのテーブルに CreatedDate、ModifiedDate、VersionNo などのプロパティがいくつかあります。エンティティを変更するたびに、これらのプロパティの値を変更/追加する必要があります。これらのプロパティを使用して基本クラスを作成し、この基本クラスからエンティティを派生させ、ObjectState に基づく SavingChanges 中に値を変更して保存できると考えました。そうすれば、監査エントリがエンティティから分離され、物事が抽象化。しかし、私は Entity Framework に慣れていないので、マッピングなどをどのように処理するかを理解するのが難しいと感じています..
誰かがこれを実装するためのアイデアを提案できれば、それは本当に役に立ちます。リポジトリ コードは次のようになります。
public class GeneralRepository<T> : IRepository<T> where T : class
{
private ObjectSet<T> _set;
private ObjectContext _context;
public GeneralRepository(ObjectContext context)
{
if (context == null) throw new ArgumentNullException("context");
_context = context; // sets the context
_set = context.CreateObjectSet<T>(); // returns the Object Set
}
#region Methods to override to work with ObjectGraphs .
/// <summary>
/// To insert data from entity into a table.
/// </summary>
/// <param name="entity"></param>
public virtual void Insert(T entity)
{
if (entity == null) throw new ArgumentNullException("entity");
_set.AddObject(entity);
}
/// <summary>
/// To delete entity from a table.
/// </summary>
/// <param name="entity"></param>
public virtual void Delete(T entity)
{
if (entity == null) throw new ArgumentNullException("entity");
_set.Attach(entity);
_set.DeleteObject(entity);
}
/// <summary>
/// To update Entity into the table
/// </summary>
/// <param name="entity"></param>
public virtual void Update(T entity)
{
if (entity == null) throw new ArgumentNullException("entity");
_set.Attach(entity);
_context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
}
/// <summary>
/// To get th entire table contents
/// </summary>
/// <returns></returns>
public IQueryable<T> GetAll()
{
return _set;
}
}