Установить свойство обратно к исходному значению при сохранении в Entity Framework - PullRequest
1 голос
/ 02 марта 2010

В событии "SavingChanges" контекста Entity Framework есть ли способ игнорировать любые изменения, внесенные в конкретное поле / свойство?

В частности, у меня есть свойство для моей сущности "CreatedBy". Мне нужно установить это свойство в приложении, но как только оно будет установлено (когда состояние сущности «Добавлено»), я хочу, чтобы свойство было доступно, но не хочу, чтобы кто-либо мог изменить значение.

Кто-нибудь знает, как игнорировать изменения в этом поле?

Спасибо.

1 Ответ

3 голосов
/ 02 марта 2010

Этот код в обработчике событий "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);
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...