2009-08-24 10 views
10

Mam problem w Fluent NHibernate przykład przy użyciu relacji wiele do wielu. Próbowałem znaleźć przykłady na podobnej sprawie i znalazłem tony, ale wciąż mam ten sam problem.Fluent NHibernate HasManyToMany() Mapping

Przy pracy projektu badania następujące jest wyjątek:

NHibernate.PropertyAccessException Wyjątek: nastąpiło pochłaniacza project.Entities.User.UserName ---> System.Reflection.TargetException: obiekt nie dopasowanie typ celu.

To jest obraz z tabel:

Tables

a kod

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

    } 

Oto kod, większość przykładów w sieci i na stronie odwzorowań Fluent NHibernate są zapisywane w w ten sam sposób, więc wszelkie pomysły?

Odpowiedz

15

odniesieniu do kodu używam w moim projekcie chciałbym zdefiniować relacje manyTomany ten sposób:

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

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

    } 

Takie definicje pracuje dla mnie. Najpierw sprawdź to, a następnie udekoruj LazyLoading i innymi właściwościami.

+4

btw, im przy użyciu wersji Fluent 1.0, więc .WithTableName() to zamiast tego Table(), mimo to próbowałem użyć go bez lazyload i innych defekacji, ale wciąż ten sam wyjątek: S – Saeedouv

+1

Czy na pewno trzeba być zmapowany z obu stron? – UpTheCreek

+0

Dla mojej sytuacji nie chcę wiązać dwukierunkowo. Mam firmę, osobę i adres, a każda firma lub każda osoba może mieć więcej niż jeden adres. W tej sytuacji co powinienem zrobić? – uzay95