0

我正在更新一个对象,并尝试更新任何子对象。

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

在 DataContext 类中,我有 ObjectUpdate 函数(现在我刚刚有一个断点,所以我可以看到值......)

在 LinqDataSource.OnUpdating 事件中,e.NewObject.Child 为空,这没有任何意义。我将它设置为一个新值,但是当我到达 DataContext.ObjectUpdate NewObject.Child 时,它已被旧值覆盖......

所以在 LinqDataSource.Updating 和 DataContext.UpdateObject 之间的某个地方,它用旧值填充对象......但我需要新值。

有没有办法解决这个问题,还是我会精神崩溃?

4

1 回答 1

0

我想我找到了问题所在。通过 .NET Reflector 运行 LinqDataSource 后,我注意到:

1) 实际上附加到数据上下文的是 LinkDataSourceUpdateEventArguments.OriginalObject 2) 在 OriginalObject 附加到数据上下文后,值从 NewObject 复制到 OriginalObject

我不明白为什么不复制关联属性。也许出于同样的原因你不能序列化它们?

解决方法是/是自己处理更新事件并执行实际提交,而不是让 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;
    }
于 2009-06-18T23:07:47.727 回答