我有两个设置了多对多关系的实体:
类别:
public class Category : IEntityWithRelationships
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public virtual ICollection<User> Users { get; set; }
//Json.NET needs this in order to serialize the object
private RelationshipManager rm;
RelationshipManager IEntityWithRelationships.RelationshipManager
{
get
{
if (rm == null)
rm = RelationshipManager.Create(this);
return rm;
}
}
}
用户:
public class User
{
public int Id { get; set; }
public ICollection<Category> Categories { get; set; }
}
相关对象加载正常,但后来我需要将类别对象序列化为Json并且Json.Net不断抛出:
无法序列化RelationshipManager对象。这类 当RelationshipManager属于一个对象时,无法序列化对象 没有实现IEntityWithRelationships的实体对象。
所以我实现了IEntityWithRelationships
接口,但现在我的相关对象没有加载。
我尝试了自定义ContractResolver
,但我仍然得到上述例外情况。如何加载我的相关对象?
答案 0 :(得分:1)
你不能在EF
课程中进行这种交流,因为EF
不会创建代理的=&gt; Lazy loading
已关闭。 http://msdn.microsoft.com/en-us/library/dd468057.aspx。实际上,当你必须序列化你的人时,人们建议你关闭LazyLoading
(当然,实现这个界面并不是正确的方法)。您应该准备更多关于如何使用序列化EntityFramework
。
答案 1 :(得分:0)
您不应该在代码优先实体中实现该接口。实现该接口违反了POCO。它是&#34; heavy&#34; EF实体和使用它将使EF处理POCO的方式失去作用。
我想你想要做的唯一原因是循环引用的问题。您应该能够solve it而无需指定任何API特定接口。