C# 实现IEntityWithRelationships会导致相关对象停止加载

C# 实现IEntityWithRelationships会导致相关对象停止加载,c#,entity-framework-4.1,json.net,C#,Entity Framework 4.1,Json.net,我有两个实体建立了多对多关系: 类别: public class Category : IEntityWithRelationships { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public virtual ICollection<User> Users { get

我有两个实体建立了多对多关系:

类别:

    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;
            }
        }
    }
公共类类别:IEntityWithRelationships
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共int Id{get;set;}
公共虚拟ICollection用户{get;set;}
//Json.NET需要这样才能序列化对象
私人关系经理;
RelationshipManager客户端与Relationships.RelationshipManager
{
得到
{
if(rm==null)
rm=RelationshipManager.Create(此);
返回rm;
}
}
}
和用户:

    public class User
    {

        public int Id { get; set; }

        public ICollection<Category> Categories { get; set; }
    }
公共类用户
{
公共int Id{get;set;}
公共ICollection类别{get;set;}
}
相关对象加载良好,但随后我需要将category对象序列化为Json,Json.Net继续抛出:

无法序列化RelationshipManager对象。这种 当RelationshipManager属于时,无法序列化对象 未实现IEntityWithRelationships的实体对象

因此,我实现了
IEntityWithRelationships
接口,但现在我的相关对象没有加载


我尝试了一个自定义的
ContractResolver
,但仍然出现了上述异常。如何获取要加载的相关对象?

EF
类中不能有这种交互,因为
EF
不会创建代理=>
延迟加载
已关闭。实际上,当您必须序列化entties时,人们建议您关闭
LazyLoading
(当然,实现该接口不是正确的方法)。您应该准备更多关于如何将
EntityFramework
与序列化一起使用的信息。

您不应该在代码优先的实体中实现该接口。实现该接口违反了POCO。它是“重”EF实体使用的接口,通过使用它,您将失去EF处理POCO的方式

我想你想这样做的唯一原因是循环引用的问题。您应该能够在不指定任何特定于API的接口的情况下执行此操作