[英]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.