WCF/EF 4.1延迟加载问题

WCF/EF 4.1延迟加载问题,wcf,web-services,lazy-loading,entity-framework-4.1,Wcf,Web Services,Lazy Loading,Entity Framework 4.1,我通过WCF服务获取应用程序的数据。在服务器端,服务使用EF4.1作为数据访问。 服务方法看起来有点像这样: public List<JobOffer> GetAllJobOffers() { var allJobOffers = _jobOffersRepository.GetAll().ToList(); return allJobOffers; } 存储库就是这样做的 public override IQueryable<JobOffer>GetA

我通过WCF服务获取应用程序的数据。在服务器端,服务使用EF4.1作为数据访问。 服务方法看起来有点像这样:

public List<JobOffer> GetAllJobOffers()
{
    var allJobOffers = _jobOffersRepository.GetAll().ToList();
    return allJobOffers;
}
存储库就是这样做的

public override IQueryable<JobOffer>GetAll()
{
    return _context.JobOffers.Include(c => c.Company);
}
我得到了一个奇怪的错误:

接收对的HTTP响应时出错。这可能是由于服务端点绑定未使用HTTP协议造成的。这也可能是由于HTTP请求上下文被服务器中止,可能是由于服务关闭。有关详细信息,请参阅服务器日志

在调试模式下,点击F5后,它将开始永远循环


在我的例子中,服务器端的延迟加载应该会有一些问题。因为当我调用该服务以返回结构简单的对象时,它就像champ一样工作。什么会搞砸?使用EF over WCF延迟加载时,使用EF加载对象的最佳实践是什么?

应该关闭延迟加载,因为序列化将触发每个导航属性的延迟加载。另一个问题是默认情况下不可序列化的。如果您的公司还具有指向其作业的导航属性,则会进行循环引用

在使用EF over WCF时,应关闭延迟加载,因为序列化将触发每个导航属性的延迟加载。另一个问题是默认情况下不可序列化的。如果您的公司还具有指向其作业的导航属性,则会进行循环引用

我认为你的问题更像是与循环关系有关。当序列化进入作用域时,所有这些都会发生。假设你有一个e实体person,它的属性地址被标记为lazy。在关系地址的另一端,实体具有Person实体的导航属性。当序列化发生时,它将遍历person实体的每个属性,当它访问地址时,导航属性开始加载它。现在,它开始序列化地址实体,当它访问Person navigation属性时,它返回到该属性并开始序列化它,它创建了循环序列化开始但无法完成的情况。要克服这个问题,您不必转向延迟加载,但您所要做的就是在本例中修饰您的datacontract,并使用[DataContractsReference=true]进行寻址,所有内容都像一个符咒。

我认为您的问题更像是与循环关系有关。当序列化进入作用域时,所有这些都会发生。假设你有一个e实体person,它的属性地址被标记为lazy。在关系地址的另一端,实体具有Person实体的导航属性。当序列化发生时,它将遍历person实体的每个属性,当它访问地址时,导航属性开始加载它。现在,它开始序列化地址实体,当它访问Person navigation属性时,它返回到该属性并开始序列化它,它创建了循环序列化开始但无法完成的情况。要克服这个问题,您不必转向延迟加载,但您所要做的就是在本例中修饰您的datacontract,并使用[DataContractsReference=true]进行寻址,所有内容都像一个符咒一样工作。

我知道这是一个老问题,但根据您在问题中的经验,我想如果你看看我最近的一篇文章,可能会有所帮助


我将介绍如何发送通过WCF反序列化的半复杂EF对象图,并处理延迟加载、代理生成和循环引用问题。可能值得一看。

我知道这是一个有点老的问题,但根据你在问题中的经验,我认为如果你看看我最近的一篇帖子,可能会有所帮助


我将介绍如何发送通过WCF反序列化的半复杂EF对象图,并处理延迟加载、代理生成和循环引用问题。这可能值得一看。

你是说没有办法通过连线发送整个对象树?有办法,但你必须帮助WCF序列化实体。这里是你所有的选择:非常感谢。你帮我解决了EF的大部分问题!你是说没有办法通过网络发送整个对象树?有办法,但你必须帮助WCF序列化实体。这里是你所有的选择:非常感谢。你帮我解决了EF的大部分问题!