2010-03-02 70 views
1

在实体框架上下文的“SavingChanges”事件中,有没有办法忽略对特定字段/属性所做的任何更改?在实体框架中将属性设置回原始值

具体来说,我对我的实体“CreatedBy”有一个属性。我需要在应用程序中设置此属性,但一旦设置(实体状态为“已添加”),我希望该属性可用,但不希望任何人能够更改该值。

有谁知道如何忽略对此字段的更改?

谢谢。

回答

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); 
       } 
      } 
     }