1

我有一个像

ModelA 包含一个集合。

ModelB 包含一个 Collection 作为反向引用。如果我使用 Include("ModelB") 进行查询,则由于循环引用而失败。不好,但我通过为每个元素设置 ModelB.List=null 解决了这个问题。

现在的问题是提交更改后的 ModelA 树:我将 ModelB-entities 添加到 ModelA.ModelB[]。现在 UpdateEntity 函数抱怨它无法添加声明为静态的 ModelB 类型的元素。JSON 反序列化器正在创建静态数组。

如何结合 upshot/MVC4 提交不完全平坦的数据模型?因为现在不可能创建自己的 DTO 对象,您可能会发现我现在卡住的东西......

在更好地调查错误之后,我认为问题在于循环反向引用:

ModelA->ModelB->ModelA 正在破坏数据的存储。“无法将 ModelA 类型的数据添加到 ModelB 类型”。正如我提到的,反向引用设置为 Null,因为循环引用序列化问题......

我希望这将是一种更简单的方法,可以更轻松地手动使用我拥有 mroe 控制的 DTO 对象。

另请参阅: MVC 4,旅程开始的Upshot 实体循环引用...

4

1 回答 1

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

于 2012-04-05T07:18:43.660 回答