gpt4 book ai didi

.net - 将成员 'X'更改为与关联成员 'Y'不一致

转载 作者:行者123 更新时间:2023-12-03 15:04:06 26 4
gpt4 key购买 nike

如果我按照以下步骤操作,我会收到此错误:

  • 更改对象的属性 Y(关联的实体属性)
  • 尝试提交更改
  • 此时 Y 的值和 X(底层键)的值不一致——LINQ to SQL 显然在调用 GetChangeSet 之前不会同步这些。
  • 在更新操作期间,由于某些业务逻辑或数据库级别的约束而发生预期错误。
  • 此时 Y 的值与 X 一致,因为调用了 GetChangeSet。
  • 将 Y 的值更改为 Nothing(也称为 null)。
  • 调用 GetChangeSet。

  • 错误出现在最后一步是因为X的值和X的原始值(GetOriginalEntityState返回)不同,新的值和Y不一致?这是为什么?这是 LINQ to SQL 中的错误。一定是因为如果我在步骤 5 中将 Y 更改为另一个(非空)值,我看不到相同的行为。解决这个问题的正确方法是什么?我可以看到几种方法:
  • 发生错误时丢弃 DataContext 并保持 UI 不变。我不喜欢这样,因为这样就无法检测到乐观的并发更改冲突。新上下文中没有在填充 UI 的同时填充的原始值,因此如果 UI 中有任何过时的值,它们将导致数据库中的数据恢复。
  • 刷新数据上下文 (OverwriteCurrent) 并保持 UI 不变。我不喜欢这个,原因与#1 相同。
  • 刷新数据上下文 (OverwriteCurrent) 并重新填充 UI。我不喜欢这样,因为刚刚呈现给用户的错误消息不会向用户显示他们犯的错误并允许他们更正它。它还会丢弃用户可能进行的所有其他更改。
  • 当错误发生时,显式检索与X原始值对应的Y键并重置Y,然后调用GetChangeSet重新同步X(X是只读的或私有(private)的,所以我不能直接重置它)。这似乎可行,但似乎是一种 hack,并且可能需要大量代码来解决其他类似错误。

  • 有没有更好的解决方案。这是应该报告的事情吗?

    最佳答案

    根据 MSDN:

    对于关系的更新,从子代到父代的引用(即外键对应的引用)被认为是权威。反向(即从父级到子级)的引用是可选的。关系类(EntitySet 和 EntityRef)保证双向引用对于一对多和一对一关系是一致的。如果对象模型不使用 EntitySet 或 EntityRef,并且如果存在反向引用,则您有责任在更新关系时使其与正向引用保持一致。

    如果您同时更新所需的引用和相应的外键,则必须确保它们一致。如果在调用 SubmitChanges 时两者不同步,则会引发 InvalidOperationException 异常。尽管外键值更改足以影响基础行的更新,但您应该更改引用以保持对象图的连接性和关系的双向一致性。

    http://msdn.microsoft.com/en-us/library/Bb386982(v=VS.90).aspx

    关于.net - 将成员 'X'更改为与关联成员 'Y'不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4588294/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com