【问题标题】:Is there a simple way to serialize/deserialize a collection of entities from an EF container?是否有一种简单的方法来序列化/反序列化 EF 容器中的实体集合?
【发布时间】:2012-02-10 17:06:52
【问题描述】:

我似乎突然想到了以下一系列事件:

  1. 我创建了一个模型。
  2. 我将数据加载到模型中。
  3. 我更改了模型,在往返过程中丢失了数据。
  4. 我将数据重新加载到模型中,为此编写了大量样板代码。

我能想到的选项:

  • (A) 在我更改模型之前让 SSMS 生成脚本。
  • (B) 使用 TSQL for xml 功能将我的数据转换为 XML(我必须学习如何 这样做,但似乎有可能)。
  • (C) 更改 EF 代码生成 放置 XML 序列化属性
  • (D) 有一个 专家告诉我为什么我的方法是错误的,让我直截了当,所以这个 问题无效

【问题讨论】:

    标签: c# entity-framework serialization xml-serialization


    【解决方案1】:

    一旦您序列化并共享/存储了该数据,您就基本上拥有了一份合同。因此,如果您预见到模型版本控制的任何问题,我将创建一个单独的 DTO 模型用于序列化目的。然后,即使您的数据库模型发生更改,您也可以将数据重新加载到您的 DTO 中。您显然需要将 DB 模型映射到 DB 模型或从 DB 模型映射,但这通常很简单。

    简而言之,我认为问题在于模型的双重用途:

    DB <===> Model <==> storage
    

    当以下方法效果更好时:

    DB <===> DB Model <==*==> DTO Model <===> storage
    

    现在您可以通过调整标记为*的链接中的代码来单独处理数据库模型的版本控制

    您可以在这种情况下处理存储更改,甚至支持多个 DTO 模型(用于不同目的,或不同/不兼容的修订版)。

    每当序列化变得棘手时,最简单的解决方法通常是:引入 DTO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-24
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      • 2014-05-14
      相关资源
      最近更新 更多