相关疑难解决方法(0)

ef4导致Web服务中的循环引用

我有一个Reason对象:

public class Reason
{
    public virtual long Id { get; set; }
    public virtual string Name { get; set; }
    public virtual Company Company {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我使用实体框架4,公司是公司的导航属性.
我还使用webservices将数据返回给客户端.
我有web方法返回原因:

  [WebMethod]
    public Reason[] GetCallReasons()
    {
        IReasonRepository rep =
            ObjectFactory.GetInstance<IReasonRepository>();
        return rep.GetReasonsList().ToArray();
    }
Run Code Online (Sandbox Code Playgroud)

由于ef4,我在执行web方法时遇到以下异常:

A circular reference was detected while serializing an object of type 'System.Data.Entity.DynamicProxies.Reason_24A0E4BBE02EE6BC2CF30BB56CFCB670C7D9D96D03D40AF4D174B89C9D3C5537'
Run Code Online (Sandbox Code Playgroud)

问题是因为ef4添加了无法序列化的属性: rep.GetReasonsList()上的监视面板图像.ToArray()

为了解决这个问题并消除错误,我可以通过不使虚拟或删除导航属性来禁用导航属性.但我知道它并想要使用延迟加载功能.

我也可以为Reason编写特定的序列化器,但是我在我的web服务中使用了许多类,并为所有这些编写序列化器是很多工作.

我怎样才能解决这个异常?

.net c# serialization entity-framework web-services

4
推荐指数
2
解决办法
5355
查看次数

标签 统计

.net ×1

c# ×1

entity-framework ×1

serialization ×1

web-services ×1