SaveChanges не сохраняет изменения - PullRequest
1 голос
/ 08 июня 2011

У меня есть приложение, которое загружает все данные, как и ожидалось, используя EF, однако, когда дело доходит до сохранения, я не могу заставить его работать вообще.

Я начал с простого, просто используя значение из выпадающего списка, чтобы изменить 1 поле в базе данных. Когда значение изменяется, оно выполняет

this.t.Incident.AssignedTeamID = (int)this.cbTeam.SelectedValue;

Я также подтвердил, что это изменило значение EntityState на Modified и что это то значение, которое я ожидаю. Несмотря на это, звонить

hdb.SaveChanges();

ничего не сохраняет обратно в базу данных. Я знаю, что это, наверное, что-то простое, что мне не хватает, но я вообще не могу понять, что это такое.

Обновление: Добавление hdb.context.Attach(this.t.Incident); перед использованием SaveChanges приводит к InvalidOperationException с указанием " На объект сущности нельзя ссылаться несколькими экземплярами IEntityChangeTracker. "

Если это имеет какое-то значение, это настольное приложение, а не веб-приложение

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Скорее всего, поскольку вы работаете с веб-приложением, у вас есть проблема с отключенным контекстом obect. Со всеми ORM вы должны пройти процесс присоединения, чтобы обновить сущность. SaveChanges никогда не будет работать с обеих сторон запроса / ответа.

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

Спасибо всем, кто писал здесь.После прочтения этих деталей ответ был довольно прост.

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

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

...