悬赏园豆:100
[待解决问题]
浏览: 383次
我有这样的一个实体:School,保存了所属的地区ID。
目前我的NHibernate是这样配置的:
<property name="SchoolName" column="SchoolName"/>
<property name="DistrictID" column="DistrictID"/>
<property type="string" name="DistrictName" formula="(SELECT t.RegionName FROM CM_Region t WHERE t.ID = DistrictID)" />
所以在生成的语句时,会有子查询:
SELECT cmschool0_.ID AS ID67_1_,
cmschool0_.SchoolName AS SchoolName67_1_,
cmschool0_.DistrictID AS DistrictID67_1_,
(
SELECT t.RegionName
FROM CM_Region t
WHERE t.ID = cmschool0_.DistrictID
) AS formula82_1_,
FROM CM_School cmschool0_
这样,数据量大的时候,性能肯定不行的。而且我的表中有很多个这样的字段,个个都是这样子查询来显示的话,性能实在会有很大的影响。
所以,我想问一下,有没什么办法,可以直接设置NHibernate的映射,让生成的语句为
SELECT cs.ID,cs.SchoolName,cb.BasicDataName
FROM CM_School cs LEFT JOIN CM_BasicData cb ON cs.DistrictID=cb.ID
其中DistrictName直接映射到表CM_BasicData表中的BasicDataName?
这种情况在项目中很多,比如数据一般只保存更新人的ID,需要显示更新人的姓名的时候,如果是ADO.NET时,是直接通过SQL的LEFT JOIN进行查询显示。
这样的情况下,NHibernate如何处理呢?
是通过many-to-one吗?有没有更好的办法以实现像ADO.NET中的LEFT JOIN方式呢?
谢谢!