Entity Framework 4 - Как должна работать ObjectContext.Refresh ()? - PullRequest
4 голосов
/ 20 ноября 2011

Когда я вызываю Refresh с помощью RefreshMode.StoreWins для объекта, который находится в моем контексте, и значения в базе данных отличаются от того, что в данный момент содержится в объекте, должен ли мой объект обновлять текущие значения до значения базы данных, даже если мой Объекты entitystate неизменны?

При редактировании сущности мы создаем новый контекст и создаем новый ourClass (classId), который загружает текущую сущность нашего типа класса из базы данных. Внесение изменений в ourClass и вызов SaveChanges правильно сохраняет значения в базе данных. После возврата к вызывающей модели представления мы вызываем Refresh для существующего контекста, используя RefreshMode.StoreWins, но это не обновляет значения сущностей в этом контексте, несмотря на то, что значения в базе данных были корректно обновлены с использованием SSMS. Любые идеи, что я должен искать для решения этой проблемы?

EDIT: Простой пример того, как мы делаем вещи:

var context1 = new Model1();
LoadContext(); //loads all the data from the database and adds them to the context
var context2 = new Model1();
var SelectedObject = context1.Table1.First();
OurObject selectedObjectForEdit = new OurObject(SelectedObject.ObjectId);
context2.Table1.Add(selectedObjectForEdit);
selectedObjectForEdit.Name = "new name";
context2.SaveChanges();
context1.Refresh(RefreshMode.StoreWins, SelectedObject);

1 Ответ

0 голосов
/ 21 ноября 2011

Вы должны обратить внимание на то, что контекст обновляет сущность, которая находится в собственном контексте , но не в другом контексте; обновляет сущность с другим контекстом, запускаемым вручную , без каких-либо исключений , и никаких изменений не происходило даже с SoreWins.

var context1 = new Model1();
var context2 = new Model1();
context1.Table1.First().Caption = "a";
var entity = context2.Table1.First();
context1.SaveChanges();
//below code run without exception but any change not affected
context1.Refresh(RefreshMode.StoreWins, entity);

context1 заставляет обновить сущность, которая включена в context2.

...