2011-12-27 11 views
0

参照(m => m.Store).Column( "StoreId")と私がSchemaExportを呼び出すと、データベーステーブルに「StoreId」という名前の2つの外部キー列と「Store_id 'FluentNHibernate ColumnNameのバグ?

Column()メソッドを終了すると、 'Store_id'列のみが作成されます。

これはFluentNHibernateフレームワークのバグですか? 「StoreId」列のみを使用したいと考えています。

ありがとうございます。

public class EntityMap<T> : ClassMap<T> where T : Entity 
{ 
    public EntityMap() 
    { 
     Id(m => m.Id); 
    } 
} 

public class StoreMap : EntityMap<Store> 
{ 
    public StoreMap() 
    { 
     Map(m => m.Name); 
     HasMany(m => m.Staff) 
      .Inverse() 
      .Cascade.All(); 
     HasManyToMany(m => m.Catalogue) 
      .Table("Store_Product") 
      .Cascade.All(); 
    } 
} 

public class EmployeeMap : EntityMap<Employee> 
{ 
    public EmployeeMap() 
    { 
     Map(m => m.LastName); 
     Map(m => m.FirstName); 
     References(m => m.Store).Column("StoreId"); 
    } 
} 

public class ProductMap : EntityMap<Product> 
{ 
    public ProductMap() 
    { 
     Map(m => m.Name); 
     HasManyToMany(m => m.Stores) 
      .Table("Store_Product") 
      .Inverse() 
      .Cascade.All(); 
    } 
} 
+0

あなたが店や他のクラス(ストアを参照している1)のために、あなたのマッピングを投稿する必要があります。 –

+0

ありがとうございます。私はマッピングクラスで私のポストを更新しました。 – Powerslave

+0

ここに掲載していない店舗クラスへのリンクはありますか?また、ストアマップをId(m => m.Id).Column( "StoreId")に変更してみてください –

答えて

0

ように見えるhasManyの ためStoreMapで.KeyColumn(「StoreId」)を追加する必要があり、そのどこにも記述されていないが、私は見ました。

列を双方向に設定する必要があります。その後、「Store_id」列が消えます。あなたの答えはありがとう!私の上記の例の場合

public class EntityMap<T> : ClassMap<T> where T : Entity 
{ 
    public EntityMap() 
    { 
     Id(m => m.Id); 
    } 
} 

public class StoreMap : EntityMap<Store> 
{ 
    public StoreMap() 
    { 
     Map(m => m.Name); 
     HasMany(m => m.Staff) 
      .KeyColumn("StoreId") 
      .Inverse() 
      .Cascade.All(); 
     HasManyToMany(m => m.Catalogue) 
      .Table("Store_Product") 
      .ParentKeyColumn("StoreId") 
      .ChildKeyColumn("ProductId") 
      .Cascade.All(); 
    } 
} 

public class EmployeeMap : EntityMap<Employee> 
{ 
    public EmployeeMap() 
    { 
     Map(m => m.LastName); 
     Map(m => m.FirstName); 
     References(m => m.Store).Column("StoreId"); 
    } 
} 

public class ProductMap : EntityMap<Product> 
{ 
    public ProductMap() 
    { 
     Map(m => m.Name); 
     HasManyToMany(m => m.Stores) 
      .Table("Store_Product") 
      .ParentKeyColumn("ProductId") 
      .ChildKeyColumn("StoreId") 
      .Inverse() 
      .Cascade.All(); 
    } 
} 
0

列を離れる場合、これは、バグではありません()デフォルトではNHibernateはあなたの外部キーがプロパティ名+は+ IDを強調で検討し、あなたが休暇列ですストアと呼ばれるあなたがマッピングされているプロパティ名を取り、にマージnhhibernate _id

あなたはマップが今解決策を見つけたこの

public StoreMap() 
{ 
    Map(m => m.Name); 
    HasMany(m => m.Staff) 
     .Inverse() 
     .Cascade.All().KeyColumn("StoreId"); 
    HasManyToMany(m => m.Catalogue) 
     .Table("Store_Product") 
     .Cascade.All(); 
} 
+0

ありがとうございました。だから、私が望むように(Store_idの代わりに "StoreId")外部キー列に名前を付けることはできないと言っていますか? – Powerslave

+0

あなたの地図でinverseを使用すると正しく動作するようにinverse()を削除する必要があります。逆にマップを2回外部キーを生成させるからです。 –

+0

私はそうは思わない。 Inverse()はEmployeeに格納を指示し、FKとは何も関係がありません。しかし、私は実験的に削除しましたが、それでもまだ 'Store_id'です。 – Powerslave