Исключить объекты из SaveChanges - PullRequest
0 голосов
/ 19 марта 2011

Может кто-нибудь сказать мне, как исключить какую-либо сущность из контекста перед сохранением изменений.

Например, у меня есть 2 сущности Действия и Пользователи, и я хочу сохранить только пользователей?

Ответы [ 5 ]

1 голос
/ 19 марта 2011

Если вы изменили действие и не хотите его изменять, вы можете либо отсоединить его от контекста, либо установить его как неизмененный (это похоже на хак).

Отсоединение объекта:

context.Detach(action);

Установка состояния без изменений:

context.ObjectStateManager.ChangeObjectState(action, EntityState.Unchanged);

Имейте в виду, что если вы также изменили отношение между действием и пользователем, вам также необходимо будет повторно выполнитьсостояние отношения, позвонив ObjectStateManager.ChangeRelationshipState.

В любом случае вы делаете что-то не так, потому что такая ситуация не должна возникать.Вы всегда должны изменять только те объекты, которые хотите сохранить.Если по какой-либо причине вам нужно изменить только часть из них, ваш подход к клонированию сущностей и изменить их в другом контексте является правильным.Контекст - это единица работы.Вам следует изменять только те объекты, которые являются частью одной и той же бизнес-операции.

0 голосов
/ 19 марта 2011

Вы можете изменить состояние измененных объектов (типа Action в вашем случае) на "Без изменений", используя ObjectStateManager, например, так:

context.ObjectStateManager.ChangeObjectState(actionObject, EntityState.Unchanged);

Надеюсь, это поможет:)

ps: вы можете получить список измененных объектов, используя это:

var modifiedActions = context.Actions.Where(a=>a.EntityState!=EntityState.Unchanged);
0 голосов
/ 19 марта 2011

Что ж, лучший вариант - не изменять сущности, если вы действительно не хотите их менять. Однако вы можете изменить их состояние. В книге Programming Entity Framework есть подробности об этом.

0 голосов
/ 19 марта 2011

Я решаю эту проблему путем создания копии сущностей Action со всеми дочерними (глубокая копия), и когда я изменил их, я работал над копией.

0 голосов
/ 19 марта 2011

Это невозможно, поскольку метод SaveChanges работает на уровне контекста, а не на уровне сущности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...