为什么更新 Linq 对象时子属性会被覆盖?
我正在更新一个对象,并尝试随之更新所有子对象。
基本上我正在处理 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我想我找到了问题所在。 通过 .NET Reflector 运行 LinqDataSource 后,我注意到:
1)它实际上是附加到数据上下文的 LinkDataSourceUpdateEventArguments.OriginalObject
2)在 OriginalObject 附加到数据上下文后,值从 NewObject 复制到 OriginalObject
我不明白的是为什么不复制关联属性。 也许出于同样的原因,您无法序列化它们?
解决方法是自己处理 Updating 事件并执行实际的提交,而不是让 LinqDataSource 处理该部分。
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.