Проблема обновления сущности - PullRequest
0 голосов
/ 21 июня 2011

У меня проблема при обновлении сущности (пользователя) в моем приложении.

Объект находится в сеансе, когда пользователь был зарегистрирован. Итак, я сделал это:

Dim u as User = (From x in ctx.Users).First()
Session("user") = u

Хорошо, нет проблем.

Но когда мне нужно сменить пользователя:

Dim u as User = Ctype(Session("User"),User)
u.name = "new name"
ctx.Users.ApplyCurrentValues(u)

Я получил следующую ошибку:

Объект с ключом, который соответствует ключ предоставленного объекта не может быть найденным в ObjectStateManager. Убедитесь, что ключевые значения предоставленный объект соответствует значениям ключа объекта, на который должны быть внесены изменения приложенное.

Ответы [ 2 ]

0 голосов
/ 22 июня 2011

Первый пример не может работать, пока вы не сделаете это:

Dim u as User = Ctype(Session("User"),User)
u.name = "new name"
(From x in ctx.Users).First()
ctx.Users.ApplyCurrentValues(u)
ctx.SaveChanges

ApplyCurrentValues ​​принимает значения только из переданного объекта и копирует их в тот же тип объекта, который должен быть загружен и присоединен к контексту.

Второй пример, показанный @Mlantosca, не может работать, потому что вы сохраняете сущность в сеансе и не отсоединяли ее. Чтобы это работало, вы должны использовать:

Dim u as User = (From x in ctx.Users).First()
ctx.Detach(u)
Session("user") = u
0 голосов
/ 22 июня 2011

Вы можете попробовать это:

ctx.Users.Attach(User);
ctx.ObjectStateManager.ChangeObjectState(User, EntityState.Modified);
ctx.SaveChanges();

это стиль, который я использую при обновлении существующих сущностей в EF

-Michael

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