我有像
这样的数据模型包含集合的ModelA。
ModelB包含一个Collection作为反向引用。如果我使用Include(“ModelB”)进行查询,则因为循环引用而失败。不好,但我通过为每个元素设置ModelB.List = null来解决这个问题。
现在的问题是提交一个更改的ModelA树:我正在将ModelB实体添加到ModelA.ModelB []。现在UpdateEntity函数抱怨它无法添加声明为static的ModelB类型的元素。 JSON反序列化器正在创建静态数组。
结合upshot / MVC4如何提交不完全平坦的数据模型?因为现在不可能创建你自己的DTO对象,你可能会发现我现在被困住的东西......
在更好地调查错误之后,我认为问题是循环反向引用:
ModelA-> ModelB-> ModelA打破了数据的存储。 “无法将ModelA类型的数据添加到ModelB类型”。 正如我所提到的,后向引用被设置为Null,因为循环引用序列化问题......
我希望通过我可以控制的DTO对象,更方便地进行更多操作。
请参阅:MVC 4, Upshot entities cyclic references了解旅程的开始......
答案 0 :(得分:1)
要解决循环反向引用,可以使用ignoreDataMember属性:
public class Customer
{
[Key]
public int CustomerId { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
public virtual ICollection<Delivery> Deliveries { get; set; }
}
public class Delivery
{
[Key]
public int DeliveryId { get; set; }
public string Description { get; set; }
public bool IsDelivered { get; set; }
[IgnoreDataMember]
public virtual Customer Customer { get; set; }
public virtual int CustomerId { get; set; }
}
我在一个不同的问题上为您的问题发布了一个有效的解决方案:https://stackoverflow.com/a/10010695/1226140