2009-08-24 27 views
10

Ben Pek-çok ilişkileri kullanan Akıcı NHibernate örnekte bir sorun yaşıyorum. Benzer bir örnekle ilgili örnekler bulmaya çalıştım ve tonlarca buldum ama hala aynı problemi yaşıyorum.Akıcı NHibernate HasManyToMany() Haritalama

test projesi çalışan, aşağıdaki istisnası atılır:

NHibernate.PropertyAccessException: Nesne maçı yapmaz: İstisna ---> System.Reflection.TargetException project.Entities.User.UserName ait getter oluştu hedef türü.

Bu

bir tablo görüntüsü:

Tables

ve

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

    } 

kodudur kod, web ve Akıcı Nhibernate eşleştirmeleri sayfasında en örnekler yazılır aynı şekilde, bu yüzden herhangi bir fikir?

cevap

15

ben senin manyTomany ilişkileri bu şekilde tanımlarsınız Projemdeki kullanıyorum koduna ilgili olarak:

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

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

    } 

Böyle bir tanım benim için çalışıyor. Önce bunu kontrol edin, ardından LazyLoading ve diğer bazı özellikleri ile dekore edin.

+4

btw, Im kullanarak Fluent sürüm 1.0, yani .WithTableName() Tablo() bunun yerine, yine de, tembel ve diğer defeintions olmadan kullanmaya çalıştı, ama yine de aynı istisna: S – Saeedouv

+1

her iki tarafın haritası mı olacak? – UpTheCreek

+0

Durumum için iki şekilde bağlamak istemiyorum. Şirket, kişi ve adresim var ve her şirket veya kişi 1'den fazla adrese sahip olabilir. Bu durumda ne yapmalıyım? – uzay95

İlgili konular