[英]How can I send POCO Entities through WCF Service when I don't want to track the entity *later*?
我有一个ASP.NET MVC 4项目,其中Controller调用WCF服务层,调用业务层,该层使用EF 5.0实体的存储库。 然后将结果作为POCO实体返回给控制器。
当WCF服务被直接引用为库时,它可以正常工作,但是我知道它不能被引用为服务,因为它们需要进行序列化,并且启用ProxyCreation时,这是不可能的。
我不想创建DTO,因为我使用生成的POCO实体,这就是为什么它们存在于我的拙见中。 我只想在POCO实体到达服务层之前跟踪更改。
很多人都在谈论使用DTO,即使它们与POCO相同,如果这样做,我可以创建具有不同名称的自动生成的复制类,成为“代理禁用POCO作为DTO”,这有点奇怪。
我可以通过从服务层返回对象时将其序列化的方式来杀死POCO的代理类吗?
我也不知道这个主意是否是一个好习惯。 但是,将“干净的”实体发送到我的Controllers(将其准备好映射到ViewModels)就好了。 我也在寻找性能。
使用ProxyDataContractResolver解决了该问题。 我们也必须使用[Serializable] and [DataContract(IsReference=true)]
。 通过这种组合,可以启用ProxyCreation。
我们处理此问题的方法是执行以下操作:
[Serializable()] and [DataContract(IsReference=true)]
属性[Serializable()] and [DataContract(IsReference=true)]
。 基本上就是这样。
这样,您不必创建DTO,而只需在后端和前端都使用POCO类。
但是请记住,使用IsReference = true句柄的WCF不喜欢冗余对象(因此,这对于某些具有导航属性的POCO类是一个问题)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.