1
我正面臨以下情況。用NHibernate,Bag和Enumerable.Any()生成SQL的錯誤?
我objectmodel如下:
EntityA --*> EntityB -> EntityC
EntityA
引用的EntityB
列表。 EntityB
引用單個EntityC
我的映射是:
<class name="EntityA" table="TAB_A" >
<id name="Id" column="A_ID" >
<generator class="native" />
</id>
<version name="Version" column="VERSION" />
<bag name="listOfB" cascade="save-update" table="A_TO_C" lazy="false" >
<key column="FK_A_ID" />
<composite-element class="EntityB" >
<many-to-one name="refToC" class="EntityC" column="FK_C_ID" cascade="save-update" />
</composite-element>
</bag>
</class>
我離開了所有的額外屬性和東西。
我查詢數據庫:
var query = session.Query<EntityA>()
.Where(a=> a.listOfB.Any(b => b.refToC == anInstanceOfC));
// count all matches
var count = query.ToFutureValue(t => t.Count());
好吧,這看起來不錯,我至今)。當我執行查詢時,出現錯誤,SQL語句失敗。生成的SQL包含以下子聲明:
select listOfB1_.A_ID
from A_TO_C listOfB1_
where a0_.A_ID=listOfB1_.FK_A_ID
and listOfB1_.FK_C_ID=?
聲明預計,上表A_TO_C(實際上是TAB_A的id列的列名)列A_ID。它應該做的是選擇listOfBl_.FK_A_ID列,這是引用TAB_A的A_ID列的外鍵列。
現在的問題:我錯了還是SQL生成器?
你有表A爲其他拖車也次級鍵或外鍵主鍵的設置,表A是主鍵 – MethodMan 2012-02-21 19:12:21
其實我不在乎:D。但NHibernate爲TAB_A生成主鍵A_ID,爲TAB_C生成C_ID。外鍵在列FK_A_ID和FK_C_ID上定義。這符合我的預期。 – BaSche 2012-02-21 19:56:00