繁体   English   中英

实现IEntityWithRelationships会使相关对象停止加载

[英]Implementing IEntityWithRelationships causes related objects to stop loading

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

类别:

    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 ,但是上面仍然有异常。 如何获取相关对象?

您不能在EF类中具有这种接口,因为这样EF不会创建代理的=> Lazy loading已关闭。 http://msdn.microsoft.com/zh-CN/library/dd468057.aspx 其实人建议关掉LazyLoading时,你必须系列化你entties(当然,实现该接口是不这样做正确的方式)。 您应该准备更多有关如何在序列化中使用EntityFramework

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

我想您要这样做的唯一原因是循环引用有问题。 您应该能够解决此问题,而无需指定任何特定于API的接口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM