1

我正在使用带有自我跟踪实体的 EF 开发应用程序。因为 STE 不支持延迟加载,所以在更改外键后更新实体导航属性的首选方法或最佳实践是什么?这在这里解释:

http://msdn.microsoft.com/en-us/library/ff407090.aspx

“当你通过设置外键属性改变对象之间的关系时,引用导航属性设置为null,并且不同步到客户端上相应的主体实体。图附加到对象上下文后(例如,在你调用 ApplyChanges 方法),外键属性和导航属性是同步的。”

此问题已在此处解决:

http://blogs.msdn.com/b/diego/archive/2010/10/06/self-tracking-entities-applychanges-and-duplicate-entities.aspx

但这真的是最好的方法吗?你们已经使用或想到了哪些方法来解决此限制?我发现很难相信任何人都在使用自我跟踪实体,如果它很难在您的数据网格中显示导航属性并且在您对记录进行更改时将它们设置为 null。发生这种情况时,它在我的应用程序中看起来很时髦。当然,我可以在保存并更新这些属性后返回服务器,但我的数据网格中会有一堆空导航属性,直到我调用保存在服务器上。

例如,我有一个主详细信息场景,其中我的用户从数据网格中选择一条记录,然后在下面的表单中对其进行编辑。当更改我的组合框绑定到的外键时,绑定到数据网格中导航属性的记录被设置为空。当外键更改时,如何避免这种行为并更新导航属性?

如果我尝试通过设置导航属性而不是外键来更改关系,则在尝试提交更改时会出现以下异常:

“AcceptChanges 无法继续,因为对象键值与 ObjectStateManager 中的另一个对象冲突。在调用 AcceptChanges 之前,请确保键值是唯一的。”

是否无法将主详细信息数据网格绑定到实体的导航属性?任何有关克服此问题的帮助或指导将不胜感激。

谢谢!

4

1 回答 1

0

有点令人沮丧的是,关于这些类型的问题的信息似乎很少。最后,我能够通过执行此博客文章中的#2 建议并将我的服务调用分组到一种方法来解决这个问题:

http://blogs.msdn.com/b/diego/archive/2010/10/06/self-tracking-entities-applychanges-and-duplicate-entities.aspx

问题是,如果我想返回数据库并重新加载我的数据,我还必须重新加载任何查找表,以便它们返回同一个图表以避免错误。我希望这在 STE 的未来版本中有所改变。

于 2012-04-26T22:39:02.437 回答