Kun*_*pal 6 .net wcf entity entity-framework ado.net-entity-data-model
我使用POCO Generator生成了我的POCO实体,我的数据库中有超过150个表.我在包括客户端在内的所有应用层共享POCO实体.我在我的上下文中禁用了LazyLoading和ProxyCreation.我在我的数据访问和业务层之上使用WCF.
现在,当我将poco实体返回给我的客户端时,我收到错误消息" 基础连接已关闭"我启用了WCF跟踪并发现了确切的错误:包含循环,如果禁用参考跟踪,则无法序列化.
我看了MSDN,发现在DataContract方法中设置IsReference = true的解决方案,但我没有使用DataContracts来装饰我的POCO类,我认为也不需要它.如果我用DataContract属性修饰一个类,我不会将它称为POCO
然后,我找到了解决方案,例如在我的ServiceContracts上应用自定义属性[CyclicReferenceAware].这确实有效,但我想把这个问题提交给社区,看看其他人如何管理这个问题,以及为什么微软没有提供内置的支持来解决循环问题序列化POCO类时的引用
您已经提到了这种方法,但我使用了这个属性
public class ReferencePreservingDataContractFormatAttribute : Attribute, IOperationBehavior
{
#region IOperationBehavior Members
public void AddBindingParameters(OperationDescription description, BindingParameterCollection parameters)
{
}
public void ApplyClientBehavior(OperationDescription description, System.ServiceModel.Dispatcher.ClientOperation proxy)
{
IOperationBehavior innerBehavior = new ReferencePreservingDataContractSerializerOperationBehavior(description);
innerBehavior.ApplyClientBehavior(description, proxy);
}
public void ApplyDispatchBehavior(OperationDescription description, System.ServiceModel.Dispatcher.DispatchOperation dispatch)
{
IOperationBehavior innerBehavior = new ReferencePreservingDataContractSerializerOperationBehavior(description);
innerBehavior.ApplyDispatchBehavior(description, dispatch);
}
public void Validate(OperationDescription description)
{
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
} ...以及对服务的操作的引用,如此;
[OperationContract]
[ReferencePreservingDataContractFormat]
IList<SomeObject> Search(string searchString);
Run Code Online (Sandbox Code Playgroud)
仅供参考 - 希望在应有的地方给予信任,但没有记录我最初看到上述方法的地方.
编辑:
我相信代码的来源是来自这篇博文.
| 归档时间: |
|
| 查看次数: |
4440 次 |
| 最近记录: |