状況
この時点で私が取り組んでいるプロジェクトでは、NHibernateをFluent NHibernateで使用しています。
Oracleデータベースはすでに存在しており、変更することはできません。NHibernateはForeignKeyプロパティを無視しています
私が抱えている問題は、Fluent 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方法
次の構造を有する:
は、すべての3つのこれらのエンティティが実際に閲覧していないテーブルが、その背後にあるテーブルです似ていますが。
PACKET
ビューには2つの同様のフィールドがあります。 1つは数字であるIDENTIFICATION
と呼ばれ、もう1つはIDENTIFICATION
で連結され、varcharであるID
と呼ばれるものです。
PACKET_PERSON
PACKET.ID
(そうしないPACKET.IDENTIFICATION
)と同じ連結形式を有するカラムPKT_IDENTIFICATION
を有している奇妙なことは、間違った列がForeignKey
方法であっても、上記のマッピングが働いています。このマッピングは2014年以来機能しています。
ForeignKey
メソッドをForeignKey("ID")
に変更してみました。
最後に、方法をForeignKey("JUST_SOMETHING_THAT_IS_NO_COLUMN")
に変更しました。
ここで何が起こっているか
あなたの答えをありがとう。その場合、このデータベースには外部キーの制約がなく、ビューにはプライマリキーがないので、NHibernateがどのカラムが参照されているかを知る方法は不思議です。 –
NHibernateはデータベーススキーマを検査せず、気にしません。モデルとマッピングのみが重要です。それはそれが仕事をするために必要なものであると推測します。 –
'Packet'のマッピングを使用してプライマリキーを作成し、指定した' PKT_INDENTIFICATION'カラムを使用して2つを結合します。 –