Почему дочернее свойство перезаписывается при обновлении объекта Linq?
Я обновляю один объект и пытаюсь обновить любые дочерние объекты вместе с ним.
По сути, я обрабатываю событие OnUpdating в LinqDataSource.
В классе DataContext у меня есть функция ObjectUpdate (где сейчас я только что получил точку останова, чтобы я мог видеть значения...)
В событии LinqDataSource.OnUpdating e.NewObject.Child имеет значение null, что не имеет никакого смысла. Я установил это в новое значение, но к тому времени, когда я получаю DataContext.ObjectUpdate, NewObject.Child был перезаписан со значением OLD...
Так что где-то между LinqDataSource.Updating и DataContext.UpdateObject он заполняет объект старыми значениями... но мне нужны новые.
Есть ли способ это исправить или у меня нервный срыв?
1 ответ
Я думаю, что я понял проблему. После запуска LinqDataSource через.NET Reflector я заметил, что:
1) Это LinkDataSourceUpdateEventArguments.OriginalObject, который фактически присоединен к контексту данных. 2) Значения копируются из NewObject в OriginalObject после того, как OriginalObject присоединяется к контексту данных.
Что я не понимаю, так это почему свойства ассоциации не копируются. Может быть, по тем же причинам вы не можете их сериализовать?
Обходной путь заключается в том, чтобы / должен сам обрабатывать событие Updating и выполнять фактическую отправку вместо того, чтобы позволить LinqDataSource обрабатывать эту часть.
void FormDataSource_Updating(object sender, LinqDataSourceUpdateEventArgs e)
{
var newObj = e.NewObject;
var table = FormContext.GetTable(e.NewObject.GetType());
if (BuildingObject != null)
BuildingObject(sender, new HeirarchicalBuildObjectEventArgs(newObj));
table.Attach(newObj, e.OriginalObject);
FormContext.SubmitChanges();
e.Cancel = true;
}