2011-12-27 20 views
0

如果我的ClassMap包含一個引用(m => m.Store).Column(「StoreId」)並且我調用SchemaExport,那麼我的數據庫表包含兩個外鍵列,一個名爲'StoreId',一個名爲'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

你應該張貼您的商店和其他類(即引用商店的)映射。 – 2011-12-28 06:07:56

+0

謝謝你的回答。我已經用映射類更新了我的帖子。 – Powerslave 2011-12-28 10:00:52

+0

您是否有任何其他鏈接到您的商店班級,而您並未在此發佈?也嘗試將您的商店地圖更改爲Id(m => m.Id).Column(「StoreId」) – 2011-12-28 13:23:58

回答

0

找到了解決辦法,現在,雖然它不是任何地方描述我看了。

您必須將列設置爲雙向。然後「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

必須在StoreMap添加.KeyColumn(「STOREID」)爲的hasMany 地圖上看起來是這樣

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

謝謝您的回答。所以你說不可能像我想要的那樣命名外鍵列(「StoreId」而不是「Store_id」)? – Powerslave 2011-12-28 10:01:33

+0

在你的地圖中,你必須移除inverse()才能正確工作,因爲反轉會讓你的地圖產生兩次外鍵 – 2011-12-28 11:51:10

+0

我不這麼認爲。 Inverse()只會告訴員工進行存儲,並且不應該與FK有任何關係。雖然,我通過實驗刪除了它,但它仍然是「Store_id」。 – Powerslave 2011-12-28 13:07:00

相關問題