0
我知道你可以重寫SaveChanges()
方法在DbContext
對象更新審計屬性值。但是,如果我想更新審計列而不實際將它們映射到實體,會發生什麼情況?表審計中的DbContext
有沒有辦法告訴實體框架,包括在「列到更新」列表額外未映射的列值?
謝謝!
我知道你可以重寫SaveChanges()
方法在DbContext
對象更新審計屬性值。但是,如果我想更新審計列而不實際將它們映射到實體,會發生什麼情況?表審計中的DbContext
有沒有辦法告訴實體框架,包括在「列到更新」列表額外未映射的列值?
謝謝!
嗯...審計無關的......所以,你不知道,如果字段有與開始?還是你不在乎這些字段是否已設置?
如果以後你能不能添加列,但讓他們沒有要求?我個人通過繼承增加CreatedDate,CreatedBy,ModifiedDate,ModifiedBy到我的大部分實體。 I.E.你可以有一個AuditableEnity類,像這樣:
public class AuditableEnity
{
public int? CreatedById { get; set; }
[Display(Name = "Created Date")]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy H:mm}")]
public DateTime? CreatedDate { get; set; }
public int? ModifiedById { get; set; }
[Display(Name = "Modified Date")]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy H:mm}")]
public DateTime? ModifiedDate { get; set; }
}
然後你不必亂用樣板性質的所有車型。然後你只需添加一點。
那麼你的SaveChanges()可以是這個樣子:
public override int SaveChanges()
{
//Only get changes from the auditable entities
var changeSet = ChangeTracker.Entries<AuditableEnity>();
...
if (changeSet != null)
{
foreach (var entry in changeSet.Where(c => c.State != EntityState.Unchanged))
{
if (entry.State == EntityState.Added)
{
if (entry.Entity.OverrideAuditing == false)
{
entry.Entity.CreatedById = userId;
entry.Entity.CreatedDate = DateTime.UtcNow;
}
}
entry.Entity.ModifiedById = userId;
entry.Entity.ModifiedDate = DateTime.UtcNow;
}
}
return base.SaveChanges();
}
爲什麼你不想來映射列? –
我的域模型需要與審計無關。這些數據僅與DBA相關。 –