Entity Framework - Eine unbehandelte Ausnahme des Typs 'System.StackOverflowException' in mscorlib.dll

c# entity-framework recursion stack-overflow

Frage

In mscorlib.dll ist eine unbehandelte Ausnahme des Typs 'System.StackOverflowException' aufgetreten
Stellen Sie sicher, dass Sie keine unendliche Schleife oder unendliche Rekursion haben.

Der folgende Code wird bei Erfolg dieser Methode aufgerufen:

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

Bei der Rückkehr ruft es das Entitätsmodell auf und versucht, alle Fremdschlüsselobjekte (untergeordnete Objekte) aufzufüllen. Das Schema lautet [1 Firma hat 0 bis viele ProductsSold]. Aus irgendeinem Grund läuft der Aufruf in den folgenden Code einfach von selbst ab:

[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, ruft die erste Methode die zweite Methode auf. Die zweite Methode scheint sich endlos zu nennen.

Wie kann ich das in EF beheben?

Akzeptierte Antwort

Nach dreimaligem Löschen und erneutem Erstellen meines Modells ist der Stapelüberlauf auf magische Weise verschwunden. <grrrrr />

Irgendwo auf der Linie kann es zu einem schlechten Assistentenfehler kommen.


Beliebte Antwort

Bei Asp.net Mvc, Sql Server und Linq to Entities ist genau dieses Problem aufgetreten. Beim Durchlaufen des Callstacks sah ich, dass zwei meiner Repositorys einen neuen Repository-Aufruf im jeweils anderen Repository hatten. Beispiel...

Repository1.cs

Respository2 repo2 = new Repository2();

Repository2.cs

Repository1 repo1 = new Repository1();

Ich denke, ein dummer Fehler von meiner Seite, nicht genau sicher, was los ist (vielleicht kann hier jemand klingeln ...) Abgesehen von dem Offensichtlichen, aber ich nahm die Repository-Aufrufe und alles funktioniert jetzt gut.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum