2009-08-24 33 views
10

Tôi đang gặp sự cố trong ví dụ Fluent NHibernate sử dụng mối quan hệ Nhiều-nhiều. Tôi đã cố gắng tìm ra các ví dụ về một trường hợp tương tự, và tôi đã tìm thấy tấn, nhưng tôi vẫn gặp vấn đề tương tự.Fluent NHibernate HasManyToMany() Lập bản đồ

Khi chạy dự án thử nghiệm, các ngoại lệ sau đây được ném:

NHibernate.PropertyAccessException: ngoại lệ xảy ra getter của project.Entities.User.UserName ---> System.Reflection.TargetException: Object không trận đấu Loại mục tiêu.

Đây là hình ảnh của các bảng:

Tables

và mã

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

    } 

đây là mã, hầu hết các ví dụ trên web và các trang ánh xạ thành thạo NHibernate được viết bằng theo cùng một cách, vì vậy bất kỳ ý tưởng?

Trả lời

15

Về mã Tôi đang sử dụng trong dự án của tôi, tôi sẽ xác định quan hệ manyTomany bạn theo cách này:

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

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

    } 

một định nghĩa như vậy làm việc cho tôi. Kiểm tra điều này đầu tiên sau đó trang trí với LazyLoading và một số tài sản khác.

+4

btw, im sử dụng Phiên bản thông thạo 1.0, vì vậy .WithTableName() là Bảng() thay vào đó, dù sao, tôi đã cố gắng sử dụng nó mà không cần tải xuống và các chế độ khác, nhưng vẫn là ngoại lệ tương tự: S – Saeedouv

+1

Bạn có chắc chắn cần được ánh xạ cả hai mặt? – UpTheCreek

+0

Đối với tình huống của tôi, tôi không muốn ràng buộc hai chiều. Tôi có công ty, người và địa chỉ và mọi công ty hoặc người có thể có nhiều hơn 1 địa chỉ. Trong tình huống này tôi nên làm gì? – uzay95

Các vấn đề liên quan