Почему дочернее свойство перезаписывается при обновлении объекта 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;
    }
Другие вопросы по тегам