【发布时间】:2011-08-10 22:42:04
【问题描述】:
我正在使用实体框架 (4.1) 创建一个网站,它公开 WCF 服务,并且我有一个 Silverlight 客户端通过 WCF 与服务器通信。我想通过 WCF 服务发送(并且可能接收)一些实体,而不创建代理/包装器等类。例如,我有一个 User 实体类型,其中包含用户名、密码、电子邮件字段(实际上还有更多字段,但为了保持简单而缩短了),我想将此对象发送到 Silverlight 客户端。在发送用户名和电子邮件时,我(显然)不想将密码属性发送给客户端。现在,我正在编写一个带有[Serializable] 和[DataContract] 属性的包装器,其中的字段具有[DataMember] 属性,其中仅包含我需要的字段,创建一个新实例,从实体对象复制值,并发送该代理对象。它有效,但不方便且非常痛苦。我需要的是一种机制,我可以直接设置我想要发送的属性,并且根本不暴露任何其他内容。我无法更改实体模型的代码(以添加/编辑属性),因为每次触摸 EDMX 时它都会自动重新生成。有没有办法实现只向客户公开选定的成员?
【问题讨论】:
-
好问题!公开您自己的自定义 POCO 是我知道如何做的唯一方法。
-
我同意杰的观点。您应该创建一个使用 [DataContract] 属性装饰的 DTO 类,该属性仅包含您需要的 [DataMembers]。您将需要从 EF 生成的实体映射到 DTO。
-
好吧,那么,我将继续以同样的方式前进,因为这就是我正在做的事情..我只是想确定这是最好的方式..我可以接受那个答案,如果那是作为答案提交的话:)
标签: wcf entity-framework