我注意到人们之前写了很多关于这个循环引用问题的文章,但是没有发布任何解决方案。
我在说这个错误: “序列化'DocInvoice.Models.Clients'类型的对象时检测到循环引用。”
有没有人尝试使用Json.NET库将其序列化为JSON?
如果我有Linq到实体查询,是我唯一的选择来处理代码实体属性并省略那些是导航属性?因为那些是出问题的人。
这很烦人,因为你必须在Linq“new”语句中像几十个(或更多)实体属性一样手写。例如,如果我想要所有属性,我可以这样做,但它会导致循环引用错误:
var clients = from client in edmx.Clients
from postcode in edmx.PostCodes
where (client.client_firstname.StartsWith(q) ||
client.client_lastname.StartsWith(q)) &&
postcode.postcode == client.PostCodes.postcode
select new {client, postcode};
唯一的另一个选择是:
select new { client.client_id,
client.client_firstname,
....., ... ,
postcode.postcode
}; ...
答案 0 :(得分:2)
投射到匿名类型(您的第二个示例)是正确的方法。如果以后向实体添加其他属性,这是唯一可以防止您的代码泄露信息的事情。匿名类型明确限制了代码返回的内容。