在Entity Framework中保存时将属性设置回原始值

时间:2010-03-02 17:50:01

标签: entity-framework

在Entity Framework上下文的“SavingChanges”事件中,有没有办法忽略对特定字段/属性所做的任何更改?

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

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

感谢。

1 个答案:

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