2009-08-24 6 views
10

Ich habe ein Problem in Fluent NHibernate Beispiel unter Verwendung der Viele-zu-Viele-Beziehungen. Ich habe versucht, Beispiele für einen ähnlichen Fall zu finden, und ich habe Tonnen gefunden, aber ich habe immer noch das gleiche Problem.Fließend NHibernate HasManyToMany() Mapping

Wenn das Testprojekt läuft, wird die folgende Ausnahme ausgelöst:

NHibernate.PropertyAccessException: Ausnahme aufgetreten Getter von project.Entities.User.UserName ---> System.Reflection.TargetException: Objekt nicht Spiel Zieltyp.

Dies ist ein Bild der Tabellen:

Tables

und der Code

public UsersMap() 
    { 

     this.Table("Users"); 
     Id(x => x.UserName).Column("Username").GeneratedBy.Assigned(); 

     Map(x => x.FirstName); 
     Map(x => x.LastName); 
     Map(x => x.Password); 
     Map(x =>x.EMail); 
     Map(x => x.Title); 
     Map(x => x.Division); 


     HasManyToMany<User>(x => x.Roles) 
      .Table("UserInRoles").ParentKeyColumn("Username") 
      .ChildKeyColumn("Usernamepk") 
      .Cascade.SaveUpdate().LazyLoad(); 


    } 

    public RolesMap() 
    { 
     this.Table("Roles"); 
     Id(x => x.ID).GeneratedBy.Assigned().Column("ID"); 
     Map(x => x.RoleName).Length(50); 

     HasManyToMany<User>(x => x.Users) 
      .Table("UserInRoles").ParentKeyColumn("ID") 
      .ChildKeyColumn("RoleIdpk").Cascade.SaveUpdate().LazyLoad(); 

    } 

hier ist der Code, die meisten Beispiele auf der Bahn und der Fluent NHibernate Zuordnungen Seite geschrieben in Auf die gleiche Weise, also irgendwelche Ideen?

Antwort

15

zu Code In Bezug auf die ich in meinem Projekt verwende ich Ihre ManyToMany Beziehungen auf diese Weise definieren würde:

public UsersMap() 
    { 
... 
      HasManyToMany(x => x.Roles) 
       .WithTableName("UserInRoles") 
       .WithParentKeyColumn("Usernamepk") 
       .WithChildKeyColumn("RoleIdpk"); 
    } 

    public RolesMap() 
    { 
... 
      HasManyToMany(x => x.Users) 
       .WithTableName("UserInRoles") 
       .WithParentKeyColumn("RoleIdpk") 
       .WithChildKeyColumn("Usernamepk"); 

    } 

Eine solche Definitionen für mich funktioniert. Überprüfen Sie zuerst, dann mit LazyLoading und einigen anderen Eigenschaften dekorieren.

+4

btw, ich benutze fließend Version 1.0, so dass die .WithTableName() ist Table() stattdessen, ich habe versucht, es ohne LazyLoad und andere Entscheidungen zu verwenden, aber immer noch die gleiche Ausnahme: S – Saeedouv

+1

Sind Sie sicher, dass es muss beiden Seiten zugeordnet werden? – UpTheCreek

+0

Für meine Situation möchte ich nicht in beide Richtungen binden. Ich habe Firma, Person und Adresse und jede Firma oder Person kann mehr als 1 Adresse haben. Was soll ich in dieser Situation tun? – uzay95