Je travaille avec EF 4.1 CTP5 et SQL Server 2008. Je dois comprendre comment résoudre un problème de récurrence. J'ai les 2 classes suivantes:Problème de récurrence Entity Framework
public class Nation
{
public int ID {get; set;}
public string name {get;set;}
public List<NationAlly> NationAllies {get;set;}
}
public class NationAlly
{
public int ID {get; set;}
public int level {get;set;}
public Nation Owner {get; set;}
public Nation toNation {get;set;}
}
Les entités sont mis en correspondance avec la base de données avec deux tables (Nations et NationAllies). De plus, il y a deux relations. 1) De NationAllies.OwnerID à Nation.ID 2) De NationAllies.ToNationID à Nation.ID
Lorsque je tente de récupérer un objet de type Nation de ma base de données, j'accéder à la classe DbContext NationDB:
Nation selectedNation = ((nationDB.Nations.Include("NationAllies")).Where(m => m.name == "France")).FirstOrDefault();
Le problème est que j'obtiens un objet selectedNation qui a une liste de NationAllies mais chaque NationAlly de la liste a le champ toNation = null. Tout d'abord, j'aimerais que le champ toNation récupère les informations correctes de la base de données. Comment puis-je faire cela? Ensuite, bien sûr, la Nation sera connectée à d'autres nations qui, à leur tour, auront une autre nation. Comment pourrait-on construire une carte récursive? Mon idée est de naviguer sur la carte jusqu'à un certain niveau, en interrogeant la base de données d'une manière spécifique. Ce faisant, quelle serait la meilleure approche pour avoir une bonne performance de vitesse?
Comment mapper ces entités. Tout d'abord, votre code ne corespond pas à votre requête car 'name' dans' Nation' est un entier. Le mappage par défaut pointera 'toNation' vers l'entité parente qui est dans votre cas France. Il n'y aura pas de récursivité. –
1) Correction du type erroné dans Nation.name 2) Ajout de la description sur le mappage – Francesco
@Ladislav: vous avez la récursion dans le sens que chaque nation peut avoir plusieurs Nation (s). Chaque nation a une nation dans le domaine des nations, qui, à son tour, peut avoir plusieurs nationalités. Dans ce cas, une organisation hiérarchique entière ou une carte est créée. Les limites de la carte peuvent bien entendu être finies (se terminant par des "feuilles" qui ne produisent pas de nouvelles branches, c'est-à-dire des Nations sans Alliés) ou infinies (Nations toutes interconnectées entre elles) – Francesco