在Entity Framework上下文的“SavingChanges”事件中,有没有办法忽略对特定字段/属性所做的任何更改?
具体来说,我的实体“CreatedBy”有一个属性。我需要在应用程序中设置此属性,但一旦设置(当实体状态为“已添加”时),我希望该属性可用,但不希望任何人能够更改该值。
有谁知道如何忽略对此字段的更改?
感谢。
答案 0 :(得分:3)
“SavingChanges”事件处理程序中的这段代码似乎可以解决它。
foreach (ObjectStateEntry entry in ((ObjectContext)sender).ObjectStateManager.GetObjectStateEntries(EntityState.Modified))
{
if (!entry.IsRelationship)
{
if (entry.GetModifiedProperties().Count(p => p == "CreatedBy") > 0)
{
Guid cb = entry.OriginalValues.GetGuid(entry.OriginalValues.GetOrdinal("CreatedBy"));
PropertyInfo createdBy = entry.Entity.GetType().GetProperty("CreatedBy");
createdBy.SetValue(entry.Entity, cb, null);
}
if (entry.GetModifiedProperties().Count(p => p == "CreatedDate") > 0)
{
DateTime cd = entry.OriginalValues.GetDateTime(entry.OriginalValues.GetOrdinal("CreatedDate"));
PropertyInfo createdDate = entry.Entity.GetType().GetProperty("CreatedDate");
createdDate.SetValue(entry.Entity, cd, null);
}
}
}