我以爲我有這個中間表作爲HasMany映射中間表和HasOne中間和子之間的映射,但HasOne希望共享密鑰。 (無反選項:[)與中間表的一對多映射
總之,關係結構,我有:
地址(兒童)
AddressId
..Address場
AddressCustomer(中介)
AddressCustomerId
AddressId
CustomerId
客戶(家長)
客戶編號
..Customer場
爲什麼我有這樣的中介表,而不是一個正常的一對多的?因爲會有其他實體需要包含地址。 (即網站等)他們將擁有自己的中間表,以便他們可以共享地址表。
映射我到目前爲止有:
public class CustomerAddressMap : ClassMap<CustomerAddress>
{
public CustomerAddressMap()
{
Schema("dbo");
Table("CustomerAddress");
Id(x => x.CustomerAddressId);
Map(x => x.FromDate)
.Not.Nullable();
Map(x => x.ToDate);
HasOne(x => x.Address)
.ForeignKey("AddressId")
.Cascade.All();
}
}
public class AddressMap : ClassMap<Address>
{
public AddressMap()
{
Schema("dbo");
Table("Address");
Id(x=>x.AddressId);
Map(x => x.AddressType);
}
}
隨着在CustomerAddress表爲空的AddressId列,行插入,但是AddressID從地址行不傳播回升到CustomerAddress。 HasOne沒有逆向選項,因此似乎是死路一條。我無法在CustomerAddress上生成Address ID,因爲一旦添加了諸如SiteAddress之類的東西並且必須執行相同的操作,這會導致重複。那招可能使用GUID作爲鍵,但我暫時與自動增量Ints卡住。
我正在討論的一些其他想法是映射CustomerAddress和Address的合併,但我不認爲Fluent NHibby支持這種想法。
我認爲這是某人已成功應用的問題域。基本上我想要一個一對多的關係,其中子表(不是記錄)在多個父母之間共享。有任何想法嗎?
更新:嘗試一些事情還沒有完美的解決方案後。我也嘗試過切換AddressID爲GUID並設置它作爲一個。參照(),而不是.HasOne(),其中CustomerAddress和網站地址(加入驗證它工作)負責生成地址ID。它的工作原理,但我不知道我可以買入允許GUID PK/FK地址細節。 如果周圍有引用或類似的東西,使地址生成它自己的鑰匙,而且是更新CustomerAddress/SiteAddress我會興高采烈的一個可能的解決方案。 –