我想知道人们在处理WCF服务时如何处理实体框架中缺乏Enum支持?
通常的做法似乎是将entity属性中的getter和setter声明为private,然后为该实体创建一个partial类并在其中声明enum属性 .
这一切都很好,但是对于WCF服务来说是一个问题 . 我需要客户端的Enum定义,并希望通过自动代理生成来实现 . 为此,我必须将DataMember属性添加到共享类中的Enum Property,因此它将包含在序列化过程中 .
但是,当我现在调用WCF方法时,它会序列化(int)和(Enum)属性,从而携带冗余数据并增加消息大小 . 处理此问题的最佳方法是什么?处理此方案的其他人如何处理?
谢谢,
汤姆
3 回答
我同意不应该通过WCF发送EF对象 . 通过这样做,您暴露了太多WCF服务背后的实现细节 .
要限制您需要编写的代码量,以便于从EF对象转换为WCF服务公开的DTO / POCO,请查看Automapper .
我们不通过WCF发送EF对象 .
我们将对象映射到DTO(数据传输对象)并通过WCF发送它们 .
这将改变EF 4,其中支持POCO(普通旧CLR对象)
所以EF 4不支持Enum ...让我们找到其他解决方案 .
假设你有一个 OrderStatus 枚举,如果你想遵循严格的数据库设计规则,你应该创建一个OrderStatus表 . 然后,您可以将信息添加到"enum"表中,例如:
Value(int或string)
可本地化的描述
然后,您将在引用它的表中创建一个外键 . 这是一个解决方案 .
现在另一个是用复杂类型替换status id:
http://devtalk.dk/CommentView,guid,d5dccc2a-5723-49b4-97d1-bf759b7f592d.aspx