这必须是一个常见的问题,但似乎还没有。我正在将 Linq to SQL 用于允许对我的内存模型进行各种数据更改的应用程序,然后这些更改将被放入队列中以进行异步处理。所以,我不担心更新(还)。可以通过网页上的模式弹出窗口对数据的各个部分进行更改。有些是基于网格的,有些只是属性。我遇到了更改无法在回发周期中幸存的问题。显然,在进行所有更改并且用户提交页面之前,我不想将任何内容持久化到数据库中。
到目前为止我选择的路线是:
- 我禁用了延迟加载
- 我为我的根对象创建了一个 [serializable] 部分类
- 我将东西放入会话并在 onload 事件中检索它
这似乎在原则上有效。但是,当我在从会话中检索对象后尝试更新某些子项的属性时
p.PhysicianSpecialties[0].physician_specialty_code =
ddlSpecialty.SelectedItem.Value;
我收到此错误:
Operation is not valid due to the current state of the object.
该错误是由生成的 Linq setter 方法中的此方法调用引起的:
this.SendPropertyChanging();
其他属性更新得很好:
p.PhysicianNames[0].first_name = txtFirstName.Text.ToUpper();
这不会导致错误。
我的问题:我是否从根本上走错了路?有没有更好的方法来做到这一点?是什么导致错误?
更新:例外是“System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException”。我想我正在做某事,但我还不知道解决方案。