2009-06-17 67 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; 
    }