我在每個表上都有幾個屬性,例如CreatedDate,ModifiedDate,VersionNo。每次修改實體時,我都需要爲這些屬性更改/添加值。我認爲我可以用這些屬性創建一個Base類,並讓實體從這個Base類派生出來,並在SavingChanges期間基於ObjectState我可以改變Values和Save,這樣我的審計條目將與實體隔離,事情將會是抽象。但是因爲我是Entity Framework的新手,我很難理解如何處理映射等。在數據庫第一種方法中爲實體框架5中的所有實體創建一個基類
如果任何人都可以提出實現這個想法,那將非常有幫助。 庫的代碼如下圖所示:
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;
}
}
我永遠不會讓客戶端代碼負責設置這些值。日期時間值取決於可能與數據庫服務器上的時鐘不同的時鐘。我會建議使用數據庫觸發器,以便數據庫服務器上的時間領先。 –