【问题标题】:Entity Framework - WCF - Enums?实体框架 - WCF - 枚举?
【发布时间】:2009-11-23 23:54:33
【问题描述】:

我想知道人们在处理 WCF 服务时如何处理实体框架中缺少 Enum 支持的问题?

通常的做法似乎是将实体属性中的 getter 和 setter 声明为私有,然后为实体创建一个部分类并在其中声明 enum 属性。

这一切都很好,但给 WCF 服务带来了问题。我需要客户端的枚举定义,并希望通过自动代理生成来实现。为此,我必须将 DataMember 属性添加到共享类中的 Enum 属性中,以便将其包含在序列化过程中。
但是,当我现在调用 WCF 方法时,它会同时序列化 (int) 和 (Enum) 属性,从而携带冗余数据并增加消息大小。 处理这种情况的最佳方法是什么?其他人如何处理这种情况?

谢谢,

汤姆

【问题讨论】:

    标签: c# wcf entity-framework


    【解决方案1】:

    我同意不应通过 WCF 发送 EF 对象。这样做会暴露太多 WCF 服务背后的实现细节。

    要限制您需要编写的代码量以促进从 EF 对象到 WCF 服务公开的 DTO/POCO 的转换,请查看Automapper

    【讨论】:

    • ty,Automapper 建议 +1
    【解决方案2】:

    我们不通过 WCF 发送 EF 对象。

    我们将对象映射到 DTO(数据传输对象)并通过 WCF 发送它们。

    这将随着 EF 4 改变,其中支持 POCO(普通旧 CLR 对象)

    【讨论】:

    • 谢谢,这很有意义。您会继续将 DTO 与 EF 4 一起使用,还是继续使用 EF 4 POCO 实施?我只是在看一些关于它的文章,看看它是否能正常工作
    【解决方案3】:

    所以 EF 4 不支持 Enum...让我们寻找其他解决方案。

    假设你有一个 OrderStatus 枚举,如果你想遵循严格的数据库设计规则,你应该创建一个 OrderStatus 表。然后,您可以将信息添加到“枚举”表中,例如:

    • 值(整数或字符串)
    • 可本地化的描述

    然后,您将在表中创建一个引用它的外键。 这是一种解决方案。

    现在另一种是用复杂类型替换状态id:

    http://devtalk.dk/CommentView,guid,d5dccc2a-5723-49b4-97d1-bf759b7f592d.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      相关资源
      最近更新 更多