【问题标题】:How to avoid clashes with existing entity ID's when deserializing and importing EF entities?反序列化和导入 EF 实体时如何避免与现有实体 ID 冲突?
【发布时间】:2011-02-11 18:23:23
【问题描述】:

我有一个 ASP.NET 4 Web 应用程序,它使用实体框架来保存用于导航等功能的项目的分层结构。

应用程序的一个功能允许将层次结构树的特定分支导出到 XML,使用 DataContractSerializer 生成。导出后,其目的是可以将 XML 上传到同一应用程序的另一个实例,反序列化回 EF 对象,然后添加到第二个服务器上的数据模型中。

当我尝试以这种方式导入数据时,我发现我看到以下错误:

无法添加或附加该对象,因为其 EntityReference 的 EntityKey 属性值与该对象的 EntityKey 不匹配。

仔细查看序列化程序生成的 XML,我可以看到实体键位于已序列化的项目中。由于我正在导入源自不同数据库的实体,因此某些 ID 会发生冲突。

我希望能够做的(除非我在这里遗漏了什么)是将导入的实体附加到对象上下文并重置正在导入的对象的 ID。

有没有聪明的方法来做到这一点?我是否只需将每个导入实体的 ID 设置为 0,将它们附加到对象上下文,然后保存更改?

提前致谢!

【问题讨论】:

    标签: .net asp.net entity-framework-4 datacontractserializer


    【解决方案1】:

    好吧,我自己最终还是成功了。我必须为每个实体做的事情如下:

    • 将标识属性设置为 0。
    • 将 EntityKey 属性设置为 null。
    • 对于派生自 EntityReference 的实体上的每个属性,将该引用上的 EntityKey 设置为 null。

    然后,我使用 AddObject 将层次结构中的根节点添加到我的对象上下文中,并调用 SaveChanges。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 1970-01-01
      相关资源
      最近更新 更多