0

1つのオブジェクトを更新し、それとともに子オブジェクトを更新しようとしています。

基本的に、私はLinqDataSourceのOnUpdatingイベントを処理しています。

DataContextクラスには、ObjectUpdate関数があります(現在、値を確認できるようにブレークポイントがあります...)

LinqDataSource.OnUpdatingイベントでは、e.NewObject.Childはnullであり、これはまったく意味がありません。これを新しい値に設定しましたが、DataContext.ObjectUpdateに到達するまでに、NewObject.ChildはOLD値で上書きされています...

つまり、LinqDataSource.UpdatingとDataContext.UpdateObjectの間のどこかで、オブジェクトに古い値が入力されています...しかし、新しい値が必要です。

それを修正する方法はありますか、それとも神経衰弱になりますか?

4

1 に答える 1

0

私は問題を理解したと思います。.NET Reflector を介して LinqDataSource を実行した後、次のことに気付きました。

1) 実際にデータ コンテキストにアタッチされているのは LinkDataSourceUpdateEventArguments.OriginalObject です 2) OriginalObject がデータ コンテキストにアタッチされた後、値が NewObject から OriginalObject にコピーされます

理解できないのは、関連付けのプロパティがコピーされない理由です。同じ理由でシリアル化できないのでしょうか?

回避策は、LinqDataSource にその部分を処理させる代わりに、Updating イベントを自分で処理し、実際の送信を行うことでした。

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;
    }
于 2009-06-18T23:07:47.727 に答える