2012-03-21 14 views
1

我有一個數據模型像MVC4 UpdateEntity失敗DbDataController

ModelA其中包含一個集合。

ModelB包含一個Collection作爲反向引用。如果我使用Include(「ModelB」)查詢,則由於循環引用而失敗。不好,但我通過爲每個元素設置ModelB.List = null來解決這個問題。

現在的問題是提交更改後的ModelA樹:我將ModelB實體添加到ModelA.ModelB []中。現在,UpdateEntity函數正在抱怨它不能添加聲明爲靜態的ModelB類型的元素。 JSON解串器正在創建靜態數組。

upshot/MVC4的組合如何提交不完全平坦的數據模型?因爲它是不可能的,現在來創建自己的DTO的對象,你可能什麼事情弄清楚我現在被困...

調查誤差好一點後,我認爲這個問題是循環反向引用:

ModelA-> ModelB-> ModelA打破了數據的存儲。 「無法添加ModelA類型的數據以鍵入ModelB」。 正如我所提到的反向引用設置爲空,因爲循環引用序列化問題...

我希望這將是一個更簡單的方法,用DTO對象進行更多的手動控制。

另請參閱:MVC 4, Upshot entities cyclic references的旅程的開始......

回答

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