情況
我正在使用的這個項目使用NHibernate和Fluent NHibernate。
Oracle數據庫已經存在,不能/不應該改變。NHibernate忽略ForeignKey屬性
我遇到的問題是,流利的NHibernate似乎忽略了以下代碼示例中的ForeignKey
屬性/方法。
Table("PERSON_PACKET");
Id(x => x.Id, "ID").GeneratedBy.UuidHex("N");
// Some Map(...) methods
References(x => x.Packet)
.Column("PKT_IDENTIFICATION")
.ForeignKey("IDENTIFICATION")
.Cascade.None()
.Fetch.Select()
.Not.LazyLoad();
有人可以解釋這裏發生了什麼嗎?
怎樣discoved這個
數據庫的該部分的結構如下:
所有這三個實體實際上是視圖,而不是表,但它背後的表類似於。
PACKET
視圖有兩個相似的字段。一個叫做IDENTIFICATION
這是一個數字,一個叫ID
,它是IDENTIFICATION
與其他一些數據連接在一起,並且是一個varchar。
PACKET_PERSON
具有具有相同的級聯格式PACKET.ID
(所以不PACKET.IDENTIFICATION
)
奇怪的是上面的測繪工作,即使錯列是在ForeignKey
方法列PKT_IDENTIFICATION
。此映射自2014年以來一直有效。
然後我嘗試將ForeignKey
方法更改爲ForeignKey("ID")
,這也起作用。
最後我改變了方法到ForeignKey("JUST_SOMETHING_THAT_IS_NO_COLUMN")
和事情繼續工作。
這裏發生了什麼?
感謝您的回答。在那種情況下,我想知道NHibernate如何知道引用哪個列,因爲這個數據庫沒有外鍵約束,並且該視圖沒有主鍵。 –
NHibernate不檢查數據庫模式,不關心它。只有模型和繪圖問題。它從中推斷出它需要做什麼。 –
它將使用'Packet'映射來計算其主鍵,然後使用您指定的'PKT_INDENTIFICATION'列來加入它們。 –