Nhibernate 使用每个表的主键进行一对一或多对一映射
我有一个包含主表和次表的遗留模式,其中次表通过具有相同的主键连接到主表(对于给定的主表,次表不一定存在)。我一直在上下搜索XML映射,这些映射可以使这项工作正常进行,但没有找到任何适合我的映射Nhibernate 使用每个表的主键进行一对一或多对一映射,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我有一个包含主表和次表的遗留模式,其中次表通过具有相同的主键连接到主表(对于给定的主表,次表不一定存在)。我一直在上下搜索XML映射,这些映射可以使这项工作正常进行,但没有找到任何适合我的映射 <class name="Secondary" table="Secondary" lazy="true" dynamic-insert="true" dynamic-update="true"> <id name="mainId" type="Int32">
<class name="Secondary" table="Secondary" lazy="true" dynamic-insert="true" dynamic-update="true">
<id name="mainId" type="Int32">
<column name="MAIN_ID" not-null="true" />
<generator class="foreign">
<param name="property">Main</param>
</generator>
</id>
<one-to-one class="Main" name="Main" constrained="true" />
</class>
<class name="Main" table="Main" lazy="true" dynamic-insert="true" dynamic-update="true">
<one-to-one name="Secondary" cascade="all-delete-orphan" class="Secondary" />
请注意,它使用的是主表中的MAIN_ID,完全忽略了次表。此问题在NHibernate 5.3中已修复 这是一个已知的(带有建议修复的PR) 现在,作为LINQ中的一种解决方法,您可以对一些非ID且不可为null的属性调用
Count
:
session.Query<Main>().Count(m => m.Secondary.NotNullableProperty != null)
session.Query().Count(m=>m.Secondary.NotNullableProperty!=null)
如果此类属性不存在(或者您只是想在将来轻松找到所有此类黑客用法),您还可以将Id列映射为只读属性并使用它:
session.Query().Count(m=>m.Secondary.ForceJoinId!=null)
session.Query<Main>().Count(m => m.Secondary.NotNullableProperty != null)
session.Query<Main>().Count(m => m.Secondary.ForceJoinId != null)