我对这些东西遇到了很多问题,即使用一个更简单的例子也无法解决。
我有一个WCF服务,它返回一个对象列表(来自我的实体模型)。
该模型只有2个表: 具有id,name和office_id(外键)的人 和Office,ID和地址
我正在制作一个非常简单的linq查询,返回这些人中的第一个。这工作正常,即使“ToList()”方法也能正常工作。
问题在于,当我尝试通过服务返回它时,崩溃时出现了“mscorlib.dll中出现未处理的类型'System.StackOverflowException'异常”
我认为它在尝试序列化Person对象时与导航属性有关。这些导航属性同时出现在Person和Office模型中,Person表有一个“Office”导航属性,但Office表也有一个“Person”导航属性!!
我认为这些导航属性对其他场景非常有用,但我找不到一种方法可以说不加载这些内容,或者至少不通过服务序列化并返回它!
这是linq查询(这个工作,列表里面确实有一个人):
var query = (from chosen in entities.person
select chosen).First<person>();
return query.ToList<person>();
有没有人见过这样的东西?我以前有几个WCF-Linq项目,我从来没有遇到任何类似的问题。
提前致谢。
答案 0 :(得分:3)
听起来你有一个循环引用问题,尝试用:
装饰你的Person和Office类[DataContract(IsReference = true)]
答案 1 :(得分:3)
最后我解决了它在实体对象中将ProxyCreationEnabled和LazyLoadingEnabled都设置为false:
Model.Entities entities = new Model.Entities();
public ServicePeople()
{
entities.ContextOptions.ProxyCreationEnabled = false;
entities.ContextOptions.LazyLoadingEnabled = false;
}
答案 2 :(得分:1)
假设您的WCF服务使用默认DataContractSerializer
,请尝试使用IgnoreDataMemberAttribute
修改导航属性。