C # - Entity Framework - Une exception non gérée du type 'System.StackOverflowException' s'est produite dans mscorlib.dll

c# entity-framework recursion stack-overflow

Question

Une exception non gérée du type 'System.StackOverflowException' s'est produite dans mscorlib.dll
Assurez-vous de ne pas avoir une boucle infinie ou une récursion infinie.

Le code ci-dessous est appelé en cas de succès de cette méthode:

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

Au retour, il appelle le modèle d'entité et tente de renseigner tous les objets à clé étrangère (objets enfants). Le schéma est [1 La société a 0 à plusieurs produits vendus]. Pour une raison quelconque, l'appel dans le code suivant tombe en cascade sur lui-même:

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

Comme vous pouvez le constater, la première méthode appelle la seconde méthode. La deuxième méthode semble s’appeler sans fin.

Comment résoudre ce problème dans EF?

Réponse acceptée

Après avoir supprimé et reconstruit mon modèle à partir de trois fois, le débordement de pile a disparu comme par magie. <grrrrr />

Dites-le à une mauvaise erreur de l'assistant quelque part sur la ligne.


Réponse populaire

J'ai rencontré le même problème avec Asp.net Mvc, Sql Server et Linq to Entities. En parcourant la pile d'appels, j'ai constaté que deux de mes référentiels avaient chacun un nouvel appel de référentiel dans l'autre référentiel. Exemple...

Repository1.cs

Respository2 repo2 = new Repository2();

Repository2.cs

Repository1 repo1 = new Repository1();

Je suppose que c'est une erreur stupide de ma part, je ne sais pas exactement ce qui se passe (peut-être que quelqu'un peut parler ici ...) en dehors de l'évidence, mais j'ai répondu aux appels du référentiel et tout fonctionne correctement maintenant.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow