【问题标题】:Is there a simple way to serialize/deserialize a collection of entities from an EF container?是否有一种简单的方法来序列化/反序列化 EF 容器中的实体集合?
【发布时间】:2012-02-10 17:06:52
【问题描述】:
我似乎突然想到了以下一系列事件:
- 我创建了一个模型。
- 我将数据加载到模型中。
- 我更改了模型,在往返过程中丢失了数据。
- 我将数据重新加载到模型中,为此编写了大量样板代码。
我能想到的选项:
- (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