我一直在考虑将Linq用于带有WCF的实体,用于我们正在进行的一些项目。到目前为止,一切都很好,但有一件事我不太确定。 Linq-to-entities正在创建具有EntityKey和ExtensionData属性的对象。我对他们在服务中的访问感到高兴,但担心客户似乎也可以访问它,因为它们是EntityObject类中的公共属性。
在我看来,这会导致实施漏洞,因为客户端不应该意识到这个对象是使用linq-to-entities获得的。
答案 0 :(得分:2)
您无法更改访问修饰符,因为EntityKey属性是从父EntityObject类继承的,后者将其显示为public。 ExtensionData属性与实体框架无关。它由IExtensibleDataObject定义,它在Visual Studio或svcutil生成的所有WCF代理中实现。您再次无法更改其访问修饰符。
这通常是人们不在WCF中将实体暴露为数据合同的原因。如果您使用EF v4.0,则可以使用POCO类或自我跟踪实体,而不是重实体。如果您不使用EF v4.0,则应创建单独的数据传输对象,或尝试为您的实体实施DataContractSurrogates。