«网站首页
0
悬赏园豆: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方式呢?

谢谢!

阳光沙滩海岸线的主页 阳光沙滩海岸线 | 初学一级 | 园豆:110
提问于:2010-11-24 15:51
所有回答(1)
0

School与地区是many-to-one关系,对象设计好,Mapping使用many-to-one

李永京 | 园豆:2757 (老鸟四级) | 2010-11-26 13:51
使用这些方式是可以,但我们的项目都已经到后期了,现在改这些改动有些大了。所以我只是想了解一下有没有更好的方式呢?
阳光沙滩海岸线 | 园豆:110 (初学一级) | 2010-11-27 15:23
   您需要登录以后才能回答,未注册用户请先注册