2009-06-17 88 views
0

我正在更新一個對象,並試圖隨着它更新任何子對象。爲什麼在更新Linq對象時會覆蓋子屬性?

基本上我正在處理LinqDataSource的OnUpdating事件。

在DataContext類我有ObjectUpdate函數(其中,現在我剛剛拿到了一個斷點,這樣我就可以看到值...)

在LinqDataSource.OnUpdating事件e.NewObject.Child被null,這是毫無意義的。我將它設置爲一個新的值,但是當我到達DataContext.ObjectUpdate的時候NewObject.Child已被舊OLD值覆蓋...

因此,在LinqDataSource.Updating和DataContext.UpdateObject之間的某處,它將填充對象舊的價值......但我需要新的價值。

有沒有辦法解決這個問題,還是我會精神崩潰?

回答

0

我想我找出了問題所在。通過.net反射運行的LinqDataSource後我注意到:

1)它是OriginalObject附連到數據上下文

之後實際被附接到成OriginalObject數據上下文 2)值是從NewObject的複製的LinkDataSourceUpdateEventArguments.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; 
    }