Self Tacking Entities - 如何更新导航属性?

时间:2012-04-26 04:16:37

标签: wcf silverlight entity-framework data-binding self-tracking-entities

我正在使用EF w / Self Tracking Entities开发一个应用程序。由于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。当这种情况发生时,我的应用程序看起来很时髦。当然我可以在保存后返回服务器并更新这些属性,但在我的数据网中我会有一堆空导航属性,直到我调用保存在服务器上。

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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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