为什么更新 Linq 对象时子属性会被覆盖?

发布于 2024-07-25 00:50:51 字数 424 浏览 7 评论 0原文

我正在更新一个对象,并尝试随之更新所有子对象。

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

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

在 LinqDataSource.OnUpdating 事件中,e.NewObject.Child 为 null,这毫无意义。 我将其设置为新值,但是当我到达 DataContext.ObjectUpdate NewObject.Child 时,它已被旧值覆盖...

因此,在 LinqDataSource.Updating 和 DataContext.UpdateObject 之间的某个位置,它正在使用旧值填充对象。 ..但我需要新的。

有没有办法解决这个问题,或者我会精神崩溃吗?

I'm updating one object, and trying to update any child objects along with it.

Basically I'm handling the OnUpdating event of a LinqDataSource.

In the DataContext class I have the ObjectUpdate function (where right now I've just got a breakpoint so I can see the values...)

In the LinqDataSource.OnUpdating event e.NewObject.Child is null, which makes no sense whatsoever. I set that to a new value, but by the time I get to DataContext.ObjectUpdate NewObject.Child has been overwritten with the OLD value...

So somewhere between LinqDataSource.Updating and DataContext.UpdateObject it's populating the object with the old values... but I need the new ones.

Is there a way to fix that, or am I going to have a nervous breakdown?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我们只是彼此的过ke 2024-08-01 00:50:51

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

1)它实际上是附加到数据上下文的 LinkDataSourceUpdateEventArguments.OriginalObject
2)在 OriginalObject 附加到数据上下文后,值从 NewObject 复制到 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;
    }

I think I figured out the problem. After running LinqDataSource through .NET Reflector I noticed that:

1) It's the LinkDataSourceUpdateEventArguments.OriginalObject which is actually attached to the data context
2) values are copied from the NewObject into OriginalObject after OriginalObject is attached to the data context

What I don't understand is why the association properties are not copied. Maybe for the same reasons you can't serialize them?

The workaround is/was to handle the Updating event myself and do the actual submit instead of letting LinqDataSource handle that part.

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;
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文