我正在將應用程序遷移到NHibernate,並且我正在使用Fluent NHibernate。我遇到了將一組值集合映射到聚合根目錄的問題。在流利NHibernate中處理與值類型的一對多關係
我有了一些屬性— Number
,NumberType
和Description
一個PhoneNumber
值類型。我的域中有許多對象具有電話號碼集合。
在數據庫(SQL 2008)中,這些值保存在不同的表中。所以我可能有Customers
和CustomerPhoneNumbers
以及Vendors
和VendorPhoneNumbers
。電話號碼錶除了將它們與其父母相關的外鍵之外是相同的。
的問題是,我想用一個簡單的PhoneNumber
值類型,而無需創建CustomerPhoneNumber
和VendorPhoneNumber
類型有他們與他們的父類的屬性,我不知道如何實現,在NHibernate的。這是可能的還是我需要更改我的域對象以更緊密地匹配基礎數據庫模式?
更新:一些更多的信息
它看起來像我有,甚至獲得基本的地圖檢索工作的麻煩。下面是我的一個簡單示例:
public class CustomerMap : ClassMap<Customer>
{
public CustomerMap()
{
Table("Customers");
Id(x => x.Id);
Map(x => x.Name);
Component(x => x.Address);
HasMany(x => x.PhoneNumbers)
.KeyColumn("CustomerId")
.Cascade.All()
.Table("CustomerPhoneNumbers");
}
}
public class PhoneNumberMap : ClassMap<PhoneNumber>
{
public PhoneNumberMap()
{
Id(x => x.Id);
Map(x => x.Number, "PhoneNumber");
Map(x => x.PhoneNumberType);
Map(x => x.Description);
}
}
它看起來像SQL沒有正確生成。當我試圖查看客戶的PhoneNumbers列表時,發現一個ADO錯誤,顯示NHibernate正在查找名爲PhoneNumber
的表。
它看起來好像不是拾取Table("CustomerPhoneNumbers")
部分,並且默認爲與對象命名相同的表。然而,我無法在PhoneNumberMap中指定一個表格,因爲它取決於我們正在拉取的聚合根目錄而有所不同。
可能要在此線程閱讀http://goo.gl/D0RmN – used2could 2011-03-27 16:08:33
這似乎是關於複合鍵,所以我不知道這適用於此。我目前最大的問題是,即使我在聚合根的map類中指定了一個表名,NHibernate使用的是值類型map類中的表名,或者,如果沒有,則假定表名是相同的作爲班級名稱。 – 2011-03-27 17:00:21
它默認與表名具有相同名稱的原因是因爲您沒有在PhoneNumberMap類中指定Table(「TableName」)。這並不能解決你必須將多個表映射到同一個電話號碼對象的問題,但希望有一個解決方案。 – 2011-03-27 22:43:31