MVC4 UpdateEntity中的DbDataController失败

时间:2012-03-21 19:46:25

标签: asp.net-mvc-4 upshot

我有像

这样的数据模型

包含集合的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了解旅程的开始......

1 个答案:

答案 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