我有一个关于我编写的使用 NHibernate 调用过程的代码的问题,填充一个未映射的实体,然后获取一个子实体列表。
我给你举个例子。三个实体:房屋、兴趣、用户
class house
string name; string title; string description;
list<interest> users;
我将兴趣用作房屋和用户之间关系的一个类,因为我有一些额外的属性,如排名、需要保存的评论。
class interest
house houseinterested;
user userinterested;
int ranking; string descriptions;
和用户类
class user
string name
因为我需要查询一个区域范围内的所有房屋,所以我正在对存储过程进行计算(发送纬度/经度),然后返回一个额外的属性距离,我需要在视图上显示该距离。
我不想将距离映射到表(因为我只是检索它,我从不存储该值),所以我创建了另一个类似于 house 但具有距离属性(houseview)的实体,我正在查询程序使用 CreateSQLQuery:
const string sql = "call imovel_within_area (:@orig_lat, :@orig_long, :@dist, :@take, :@skip, :@quartos, :@precomin, :@precomax)";
var query = MvcApplication.Session.CreateSQLQuery(sql)
.SetParameter("@dist", distancia)
.SetParameter("@orig_lat", latitude) //-25.363882m
.SetParameter("@orig_long", longitude) // 131.044922m
.SetParameter("@take", resultados)
.SetParameter("@skip", ((pagina-1 * resultados)))
.SetParameter("@quartos", quartos.Value)
.SetParameter("@precomin", precomin.Value)
.SetParameter("@precomax", precomax.Value);
query.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(Core.Domain.houseview)));
现在我想填写感兴趣的用户列表。
foreach (var housein houses.List<Core.Domain.houseview>())
{
house.Where(x => x.Id == house.Id).ToList().First().Interest =
MvcApplication.Session.QueryOver<Core.Domain.House>()
.Where(x => x.Id == imovel.Id).List().First().Interessados;
}
我从来不必从查询中返回未映射的列,所以我不太确定如何执行此操作,或者这在性能问题上是否可以接受。
我真的很感激一些建议!
谢谢