2009-08-24 18 views
10

多対多リレーションシップを使用するFluent NHibernateの例で問題が発生しています。私は同様のケースで例を見つけようとしましたが、トンを見つけましたが、私はまだ同じ問題を抱えています。Fluent NHibernate HasManyToMany()マッピング

テストプロジェクトを実行し、次の例外がスローされます。

NHibernate.PropertyAccessException:オブジェクト 一致しません:例外は---> System.Reflection.TargetExceptionがproject.Entities.User.UserNameのゲッターを発生しましたターゲットタイプ。

これは、テーブルの画像です:

Tables

、ここでコード

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

    } 

はコードで、ウェブと流暢NHibernateのマッピングページ上のほとんどの例がで書かれています同じように、どのようなアイデアですか?コードにについて

答えて

15

私はこの方法であなたの多対多の関係を定義します私のプロジェクトで使用しています:

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

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

    } 

このような定義は私のために動作します。 これを最初に確認し、LazyLoadingと他のいくつかのプロパティで飾ります。

+4

btw、Fluentバージョン1.0を使用していますので、代わりに.WithTableName()がTable()であるため、lazyloadやその他のdefeintionsを使わずに使用しようとしましたが、同じ例外があります。S – Saeedouv

+1

両方の面にマップされますか? – UpTheCreek

+0

私の状況では私は2つの方法でバインドしたくありません。私には会社、人、住所があり、会社や人は1つ以上の住所を持つことができます。この状況で私は何をすべきですか? – uzay95

関連する問題