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?
InformationsquelleAutor der Frage Keith Barrows | 2010-01-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach 3 mal löschen und Neuerstellen mein Modell von Grund auf, die stack-überlauf ist auf Magische Weise verschwunden. <grrrrr />
Kreide es bis zu einer schlechten Assistenten-Fehler irgendwo entlang der Linie.
InformationsquelleAutor der Antwort Keith Barrows
Versuchen Sie dies:
InformationsquelleAutor der Antwort Florim Maxhuni
Dass ich auf diese gleiche genaue Problem mit Asp.net Mvc, Sql Server und Linq to Entities. Gehen durch den callstack, sah ich, dass zwei meiner repositories jeder hatte eine neue repository-Aufruf in das andere repository. Beispiel...
Repository1.cs
Repository2.cs
Ich denke, ein dummer Fehler meinerseits, nicht genau wissen, was Los ist (vielleicht kann mir jemand hier in Glockenspiel...) abgesehen von der offensichtlichen, aber ich nahm das Repository ruft und alles funktioniert gut jetzt.
InformationsquelleAutor der Antwort Justin Soliz
Ich glaube, Sie brauchen, um die Firma -> Firma Bezug zu faul geladen.
InformationsquelleAutor der Antwort Adrian Zanescu
StackOverflow-Fehler, die durch endlose Schleife, die nutzt die volle cache-Speicher, und dann, am Ende, es zeigt die stack-überlauf-Fehler.
Endlos-Schleife müssen gestoppt werden, und es ist nicht eine bewährte Methode der Aufruf der gleichen Funktion.
Optimieren Sie den code und versuchen Sie zu vermeiden, wird die Schleife.
InformationsquelleAutor der Antwort Shivkant