【问题标题】:Entity Framework (Entities Classes) Serialization实体框架(Entities Classes)序列化
【发布时间】:2010-01-08 17:12:14
【问题描述】:

在阅读了 Enitity Framework 之后,我有一些问题:

1] 在层级之间转移实体的最佳方式是什么? a] 我是否必须为此创建更轻量级的 DTO,或者我可以有效地序列化实体并传输它?

b] 如果我必须创建轻量级 DTO,以提高效率,并且在我看到 Automapper 的良好用法之后, 我不太明白它如何节省额外的编码(如果这是它的目标), 我的意思是,我们需要编写 flattern 类(DTO)属性,所以它只保存了 ctor。

2] 从 DTO 构建实体类 back 有什么意义吗?

谢谢。

【问题讨论】:

    标签: c# .net entity-framework ado.net automapper


    【解决方案1】:

    回答1: 在层之间传输实体的最佳方式取决于您的应用程序。您可以创建 DTO,这是我的首选解决方案,虽然序列化实体是 possible,但您需要确保这实际上是您想要做的并记住:

    “当你使用二进制序列化和WCF数据契约序列化时,如果被序列化的对象在对象图中有相关对象,这些对象也会被序列化。XML序列化不会序列化相关对象。”

    Automapper 通过自动映射属性来工作,而不必编写所有管道语句,例如:

    dto.id = entity.id;
    ...
    all other dto assignment operations
    

    您很快就会看到管道代码的数量加起来,因此将节省相当多的这 = 那行代码,特别是如果您有视图类和 dto 对象,我发现这完全符合我的要求。据我所知,只有当实体和 DTO 之间的名称相同并且它可以在这些属性的类型之间进行映射时,automapper 才会起作用。如果 dto 和实体以不同的类型存储数据,您可以添加映射规则以在类型之间进行转换。

    回答2: 如果您将对象转换为 DTO 并在更高层修改它们,您打算如何通过实体框架将它们保存回来?通常您只需将这些转换回相关实体/创建一个新实体并提交这些更改。

    【讨论】:

    • 保存编码 dto.id = entity.id ?,不是很哇,反正我还有未回答的问题,将实体转移到 dtos 是最好的方法吗?或序列化实体也是可能的选择?
    • 你想让它做什么?我不能说哪个是“最好的”,而是取决于您的应用程序和偏好。我已经更新了我的答案,其中的几点应该可以回答您的所有问题。
    • 关于 automapper ,我希望它在不强迫我打开代码并编写新的 DTO/修改现有 DTO 新属性的情况下进行映射。 [可以来自 xml 配置]。因为如果我已经打开代码并编写 DTO 类及其属性,编码 dto.id = entitiy.id 不是这样节省时间,它是一个很好的,但很少一。 2]你是否也使用自动映射器,dto->实体?我在stackoverflow中看到它有一些问题?
    【解决方案2】:

    你想看看RIA Services。它就是为此而生的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-08
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多