C# 使用NHibernate映射的左连接
在我的场景中,*.hbm.xml文件中的表映射为C# 使用NHibernate映射的左连接,c#,.net,asp.net-mvc,nhibernate,C#,.net,Asp.net Mvc,Nhibernate,在我的场景中,*.hbm.xml文件中的表映射为 <class name="Student" table="Temp_Student" > <id name="StudentID" column="StudentID" type="AnsiString" /> <property name="Name" type="AnsiString" column="Name" /> <many-to-one name="Cl
<class name="Student" table="Temp_Student" >
<id name="StudentID" column="StudentID" type="AnsiString" />
<property name="Name" type="AnsiString" column="Name" />
<many-to-one name="ClassOperator" column="Class_OPERATOR" class="MvcProj.StudentClassRef" lazy="false"/>
</class>
有了上面的代码,我可以生成只包含内部连接而不包含外部连接的查询。
如何进行外部连接以获得预期结果。
我在这里使用的是NHibernate版本3.1 您可以尝试添加inverse=false来编辑*.hbm.xml文件,如下所示 答案与问题无关,我要求做左键连接。
private string GenerateSQL(ICriteria criteria, out QueryParameters queryParam)
{
CriteriaImpl criteriaImpl = (CriteriaImpl)criteria;
ISessionImplementor session = criteriaImpl.Session;
ISessionFactoryImplementor factory = session.Factory;
CriteriaQueryTranslator translator =
new CriteriaQueryTranslator(factory,
criteriaImpl,
criteriaImpl.EntityOrClassName,
CriteriaQueryTranslator.RootSqlAlias);
String[] implementors = factory.GetImplementors(criteriaImpl.EntityOrClassName);
CriteriaJoinWalker walker =
new CriteriaJoinWalker(
(NHibernate.Persister.Entity.IOuterJoinLoadable)factory.GetEntityPersister(implementors[0]),
translator,
factory,
criteriaImpl,
criteriaImpl.EntityOrClassName,
session.EnabledFilters);
queryParameters = translator.GetQueryParameters();
return walker.SqlString.ToString();
}