私はAyendeの投稿hereに記載されているように、私のアプリケーションで継承のためのテーブルごとのサブクラス戦略を使用しています。サブテーブルIDのNhibernateテーブルごとの基準は、親テーブルのキー列を使用します
しかし、サブクラスを具体的に質問して、会社と言うと、私が知っているIdでフィルタリングすると、結果のSQLが正しくなくなり、SQL Serverでエラーが表示されます。 基準:
session.CreateCriteria<Company>()
.Add(Expression.Eq("Id", 25)
.List<Company>();
結果として生成されたSQL:
SELECT this_.PartyId,
this_.CompanyName
FROM Companies this_
inner join Parties this_1_
on this_PartyId = this_1_.Id
WHERE this_1_.PartyId = 25
問題は(最後の行 - のPartyIdが締約国テーブルに定義されていない)、子テーブルのキー列がで使用されていることです親テーブル "Id"はC#のPartyクラスから派生しているので、ちょっと意味があります。しかし、Partyマッピングで定義されたId "Id"ではなく、なぜ "PartyId"というキー列を使用していますか?そして、どうすればそれを機能させることができますか?
ありがとうございます!
編集:ここでは、尋ねたように私は最終的に問題を発見した(ブログ記事中のものと同じ)マッピング
<class name="Party"
abstract="true"
table="Parties">
<id name="Id">
<generator class="identity"/>
</id>
<joined-subclass
table="People"
name="Person">
<key column="PartyId"/>
<property name="FirstName"/>
</joined-subclass>
<joined-subclass
table="Companies"
name="Company">
<key column="PartyId"/>
<property name="CompanyName"/>
</joined-subclass>
パーティマッピングを投稿できますか? – Rippo