0

J'utilise l'automappeur Fluent pour créer une configuration pour un projet NHibernate code-first (configuration MySql) et j'ai des difficultés à implémenter des relations plusieurs-à-plusieurs efficaces. À titre d'exemple, disons que je veux une table des magasins et une table des employés. Un employé peut travailler dans plusieurs magasins et bien sûr, chaque magasin a plusieurs employés qui y travaillent. Je donne donc l'entité de magasin une liste des employés comme ceci:La relation plusieurs-à-plusieurs fluide ne fonctionne pas

public class Store 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual IList<Employee> Employees { get; set; } 

    public Store() 
    { 
     this.Employees = new List<Employee>(); 
    } 
} 

public class Employee 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
} 

La création de cette base de données des résultats dans les tableaux des magasins et des employés sont automatiquement créés, mais pas de table qui met en correspondance entre les deux. Je peux créer ces deux types d'entité, ajouter des employés à la liste des employés du magasin et l'enregistrer sans rencontrer d'erreur, mais essayer de la recharger entraîne l'affichage de la liste vide. Cependant, si j'ajoute une liste des magasins à l'enregistrement des employés comme ça ...

public class Employee 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual IList<Store> Stores { get; set; } // <---- 

    public Employee() 
    { 
     this.Stores = new List<Store>(); 
    } 
} 

... et compléter la liste des magasins aussi bien avec les entités des employés alors une table de storestoemployees apparaît dans les œuvres db et tout bien.

Il me semble inefficace d'exiger que toutes les relations plusieurs-à-plusieurs de mon application requièrent des listes dans les deux Entités dans les cas où elles ne doivent apparaître que dans une décentralisation de l'Entité elle-même et dans toutes les autres. code qui doit maintenant ajouter des choses deux fois. Y a-t-il quelque chose que je fais de mal ici, ou y a-t-il un moyen pour moi de remplacer ce que Fluent fait par défaut?

+0

Dans un premier temps, vous essayez de définir une relation un à plusieurs. –

Répondre

1

Avec une collection, FNH ne peut pas décider d'utiliser un-à-plusieurs ou plusieurs-à-plusieurs et sera par défaut un-à-plusieurs. Vous pouvez remplacer cette option par une substitution.

AutoMap.Assembly... 
    .Override<Store>(m => m.HasManyToMany(s => s.Employees).Table("store_to_employee"));