繁体   English   中英

当我不想跟踪实体以后时,如何通过WCF服务发送POCO实体?

[英]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。

我们处理此问题的方法是执行以下操作:

  1. 自定义T4生成POCO类,以便它生成以[Serializable()] and [DataContract(IsReference=true)]属性[Serializable()] and [DataContract(IsReference=true)]
  2. 前端(视图)和后端(wcf服务/业务层)都引用POCO生成的类,因为由于IsReference = true,您将不使用代理。

基本上就是这样。

这样,您不必创建DTO,而只需在后端和前端都使用POCO类。

但是请记住,使用IsReference = true句柄的WCF不喜欢冗余对象(因此,这对于某些具有导航属性的POCO类是一个问题)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM