1

这必须是一个常见的问题,但似乎还没有。我正在将 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”。我想我正在做某事,但我还不知道解决方案。

4

2 回答 2

2

我从 MSDN 获得了解决方案。问题是,在这个线程中解释得比我能做的更好,一个人不能单方面改变关联,但必须在两端都这样做,通过分配一个新的子对象,而不仅仅是通过改变 id:

p.PhysicianSpecialties[0].PhysicianSpecialtyLookup = db.PhysicianSpecialtyLookups.Single(c => (c.physician_specialty_code == ddlSpecialty.SelectedItem.Value));

于 2009-05-05T02:07:23.673 回答
0

如果使用数据绑定,该怎么做呢?我在数据网格视图中有一个下拉列表,当我更改下拉值时开始抛出此错误。这让我觉得我必须要么删除关联,要么不使用数据绑定。

于 2009-05-28T22:08:09.920 回答