我有一个ASP.NET MVC 4项目,其中Controller调用WCF服务层,该层调用业务层,使用EF 5.0实体的存储库。然后结果作为POCO实体返回给Controller。
它工作正常,而WCF服务直接引用为库,但我知道它不能作为服务引用,因为它们需要序列化,并且启用ProxyCreation这是不可能的。
我不想创建DTO,因为我使用生成的POCO实体,这就是为什么它们以我的拙见存在。 我想仅在POCO实体到达服务层之前跟踪更改。
很多人谈论使用DTO,即使它们与POCO相同,如果我这样做,我可以创建自动生成的复制类,只是使用不同的名称作为“代理禁用POCO作为DTO”,会是什么有点奇怪。
我可以杀死POCO的代理类吗?从服务层返回时,对象可以被序列化吗?
此外,我不知道这个想法是否是一个好习惯。但将“干净”的实体发送到我的控制器,准备好我映射到ViewModels会很棒。 我也在寻找表现。
答案 0 :(得分:1)
使用ProxyDataContractResolver解决问题。我们也必须使用[Serializable] and [DataContract(IsReference=true)]
。通过这种组合,可以启用ProxyCreation。
答案 1 :(得分:0)
我们处理此问题的方法是执行以下操作:
[Serializable()] and [DataContract(IsReference=true)]
属性。基本上就是这样。
有了这个,您不必创建DTO,只需在后端和前端使用POCO类。
请记住,使用IsReference = true句柄的WCF不喜欢冗余对象(因此这对于某些具有导航属性的POCO类来说是一个问题)。