2009-10-15 6 views
0

J'ai une entité Resource qui a une relation many-to-many avec une entité File, de sorte qu'une ressource peut référencer plusieurs fichiers et un fichier peut référencer plusieurs ressources.Fluid nHhibernate obtient mais ne parvient pas à enregistrer avec 'HasManyToMany'

Maintenant, je m'attends à ce que la sauvegarde descende de la ressource vers les entités de fichier lorsque la ressource est sauvegardée - Lorsque je charge une entité de ressource, elle charge les entités de fichier comme prévu. Il n'enregistre pas les références d'entité de ressource au fichier.

Est-ce que quelqu'un sait ce qui ne va pas avec le mappage FNH?

Les tables de base de données avec les clés primaires sont:

Ressources - Id

ResourceFiles - resourceID, FileId

Fichiers - Id

Le code de mappage FNH est :

public sealed class ResourceMap : ClassMap<Resource>, IMap 
{ 
    public ResourceMap() 
    { 
     Table("Resources"); 
     Not.LazyLoad(); 
     Id(x => x.Id); 
     HasManyToMany<File>(x => x.Files) 
      .AsBag() 
      .Inverse() 
      .Cascade.All() 
      .ParentKeyColumn("ResourceId") 
      .ChildKeyColumn("FileId") 
      .Table("ResourceFiles"); 
    } 
} 

public sealed class FileMap : ClassMap<File>, IMap 
    { 
     public FileMap() 
     { 
      Table("Files"); 
      Not.LazyLoad(); 
      Id(x => x.Id); 
      HasManyToMany<Resource>(x => x.Resources) 
       .Not.LazyLoad() 
       .AsBag() 
       .Cascade.All() 
       .ParentKeyColumn("FileId") 
       .ChildKeyColumn("ResourceId") 
       .Table("ResourceFiles"); 
     } 
    } 

Vive

Awkward

Répondre

2

Dans votre carte de classe de ressources, vous avez inversé() spécifié, ce qui signifie que la classe de ressources attend la classe de fichiers pour faire l'économie, ce qui explique pourquoi les changements ne sont pas descendant de la classe Resource vers File. Si la classe de ressources est responsable de l'enregistrement, vous devez spécifier Inverse() dans la classe de mappage de fichiers.

Questions connexes