C # - Entity Framework - Eine nicht behandelte Ausnahme vom Typ 'System.StackOverflowException' ist in mscorlib.dll aufgetreten

Eine nicht behandelte Ausnahme des Typs 'System.StackOverflowException " ist in mscorlib.dll
Stellen Sie sicher, dass Sie nicht eine unendliche Schleife oder eine unendliche Rekursion.

Den code unten aufgerufen wird, die auf einen Erfolg dieser Methode:

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();
}

Auf die Rückkehr ruft er in das Entity-Modell und versucht, zu füllen alle ausländischen freigestellte Objekte (child objects). Das schema ist [1 Unternehmen hat 0 bis viele ProductsSold]. Aus irgendeinem Grund, den Aufruf in den folgenden code einfach Kaskaden auf sich hat:

[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);
        }
    }
}

Wie Sie sehen können, die erste Methode ruft die zweite Methode. Die zweite Methode scheint sich endlos.

Wie kann ich dieses Problem beheben in EF?

Kommentar zu dem Problem
sieht für mich wie ein Problem mit Ihren Zuordnungen Kommentarautor: hackerhasid
Was ist mit all den vollständig qualifizierten Namen? Sie machen es unnötig schwer, zu verstehen, was Los ist. Kommentarautor: Anon.
Es ist Berufung Unternehmens -> ProductsSold -> ProductsSold? Es gibt keinen code für ProductsSold in das snippet, so könnte es noch ein Problem. Der code, den Sie haben Vergangenheit sehr ähnlich sieht der generierte (und funktionierende) code in einem meiner Projekte. Kommentarautor: Sander Rijken
Vereinbart mit Sander; kann man den stack? Kommentarautor: Craig Stuntz
Eine weitere Sache zu beachten, ich würde dringend abraten das caching der db-Kontext in einer statischen Variablen. Der Kontext ist eigentlich 'Leben' für eine single-unit-of-work. Es ist wahrscheinlich nicht die Ursache dieser StackOverflow, aber es kann dazu führen, alle Arten von fiesen Probleme. Ich nicht sogar überlegen, die multi-threading Probleme umgehen. Kommentarautor: Sander Rijken

InformationsquelleAutor der Frage Keith Barrows | 2010-01-14

Schreibe einen Kommentar