有沒有辦法在物體更新時運行代碼?例如,我有一個物體在我的代碼中的很多地方都更新了。我希望能夠在更新該物體時隨時更新 DateTimeUpdated 欄位,而無需更改更新該物體的每個函式。
uj5u.com熱心網友回復:
這通常通過覆寫SaveChangesDbContext 中的方法來完成。
首先為要跟蹤 DateTimeUpdated 的可編輯物體引入基類或通用介面:
public abstract class EditableEntityBase
{
public DateTime DateTimeUpdated { get; internal set; }
}
您想要對其進行跟蹤的物體應擴展此類或實作將公開該屬性的協定介面。
然后在您的 DbContext 中,覆寫該SaveChanges方法并插入:
var updatedEntities = ChangeTracker.Entries()
.Where(x => x.State == EntityState.Modified)
.Select(x => x.Entity)
.OfType<EditableEntityBase>();
foreach (var entity in updatedEntities)
{
entity.DateTimeUpdated = DateTime.Now; // or DateTime.UtcNow
}
return base.SaveChanges();
您還可以包含x.State == EntityState.Added新記錄,但通常我會依賴資料庫中的默認值在插入時捕獲它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/359177.html
標籤:实体框架
