当使用Linq to entities和WCF时,是否有方法将EntityKey和ExtensionData访问更改为protected?

当使用Linq to entities和WCF时,是否有方法将EntityKey和ExtensionData访问更改为protected?,wcf,entity-framework,linq-to-entities,Wcf,Entity Framework,Linq To Entities,我一直在考虑在我们正在做的一些项目中使用Linq到WCF的实体。到目前为止,一切都很顺利,但有一件事我不是很确定。Linq to entities正在创建具有EntityKey和ExtensionData属性的对象。我对他们在服务中的访问感到高兴,但担心的是,客户端似乎也可以访问该服务,因为它们是EntityObject类中的公共属性 在我看来,这会导致实现泄漏,因为客户端不应该知道该对象是使用linq to entities获取的。您不能更改访问修饰符,因为EntityKey属性是从父Enti

我一直在考虑在我们正在做的一些项目中使用Linq到WCF的实体。到目前为止,一切都很顺利,但有一件事我不是很确定。Linq to entities正在创建具有EntityKey和ExtensionData属性的对象。我对他们在服务中的访问感到高兴,但担心的是,客户端似乎也可以访问该服务,因为它们是EntityObject类中的公共属性


在我看来,这会导致实现泄漏,因为客户端不应该知道该对象是使用linq to entities获取的。

您不能更改访问修饰符,因为EntityKey属性是从父EntityObject类继承的,父EntityObject类将其显示为公共。ExtensionData属性与实体框架无关。它由IExtensibleDataObject定义,IExtensibleDataObject在Visual studio或svcutil生成的所有WCF代理中实现。同样,您不能更改其访问修饰符


这就是人们通常不在WCF中将实体作为数据契约公开的原因。如果使用EF v4.0,则可以使用POCO类或自跟踪实体,而不是重型实体。如果您不使用EF v4.0,您应该创建单独的数据传输对象,或者尝试为您的实体实现。

谢谢Ladislav。我希望有一些黑魔法,比如我可以将一些配置文件指向另一个根对象进行继承,这些工具将生成适当的代码。不幸的是没有。我想我可能得走POCO路线。谢谢