C# - 實體框架 - mscorlib.dll中發生未處理的“System.StackOverflowException”類型異常

c# entity-framework recursion stack-overflow

mscorlib.dll中發生了未處理的“System.StackOverflowException”類型異常
確保沒有無限循環或無限遞歸。

以下代碼在此方法成功時調用:

internal static List<RivWorks.Model.Negotiation.ProductsSold> GetProductsSoldByCompany(Guid CompanyID)
{
    var ret = from a in _dbRiv.ProductsSold where a.Company.CompanyId == CompanyID select a;
    return ret.ToList();
}

在返回時,它調用實體模型並嘗試填充所有外鍵控對象(子對象)。架構是[1公司有0到多個ProductsSold]。出於某種原因,對以下代碼的調用只會自行級聯:

[global::System.Data.Objects.DataClasses.EdmRelationshipNavigationPropertyAttribute("RIV_Model", "FK_ProductsSold_Company", "Company")]
[global::System.Xml.Serialization.XmlIgnoreAttribute()]
[global::System.Xml.Serialization.SoapIgnoreAttribute()]
[global::System.Runtime.Serialization.DataMemberAttribute()]
public Company Company
{
    get
    {
        return ((global::System.Data.Objects.DataClasses.IEntityWithRelationships)(this)).RelationshipManager.GetRelatedReference<Company>("RIV_Model.FK_ProductsSold_Company", "Company").Value;
    }
    set
    {
        ((global::System.Data.Objects.DataClasses.IEntityWithRelationships)(this)).RelationshipManager.GetRelatedReference<Company>("RIV_Model.FK_ProductsSold_Company", "Company").Value = value;
    }
}
/// <summary>
/// There are no comments for Company in the schema.
/// </summary>
[global::System.ComponentModel.BrowsableAttribute(false)]
[global::System.Runtime.Serialization.DataMemberAttribute()]
public global::System.Data.Objects.DataClasses.EntityReference<Company> CompanyReference
{
    get
    {
        return ((global::System.Data.Objects.DataClasses.IEntityWithRelationships)(this)).RelationshipManager.GetRelatedReference<Company>("RIV_Model.FK_ProductsSold_Company", "Company");
    }
    set
    {
        if ((value != null))
        {
            ((global::System.Data.Objects.DataClasses.IEntityWithRelationships)(this)).RelationshipManager.InitializeRelatedReference<Company>("RIV_Model.FK_ProductsSold_Company", "Company", value);
        }
    }
}

如您所見,第一種方法調用第二種方法。第二種方法似乎無休止地稱呼自己。

我如何解決這個問題?

一般承認的答案

在從頭開始刪除和重建我的模型3次後,堆棧溢出神奇地消失了。 <grrrr />

將它歸結為沿線的某個錯誤的嚮導錯誤。


熱門答案

我使用Asp.net Mvc,Sql Server和Linq to Entities遇到了同樣的問題。通過callstack,我看到我的兩個存儲庫在另一個存儲庫中都有一個新的存儲庫調用。例...

Repository1.cs

Respository2 repo2 = new Repository2();

Repository2.cs

Repository1 repo1 = new Repository1();

我想這是一個愚蠢的錯誤,不完全確定最新情況(也許有人可以在這裡...)除了顯而易見的但我把Repository調出來了,現在一切正常。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因