NHibernate实例化类部分属性

NHibernate 为习惯SQL的开发者提供了接口,将查询的结果转变为持久化对象。虽然该方法不是很提倡。

GetCurrentSession().CreateSQLQuery(sql)

 参数sql就是实际要执行的sql语句。

如果需要将结果转化为持久换对象,那需要提供对象类型。

GetCurrentSession().CreateSQLQuery.AddEntity()

但需要注意的是,该类型必须是NHibernate可持久化的对象,也就是该类型必须写在hbm.xml文件中。

同时,sql中必须提供类型中所必须的全部属性,实例化全部属性。假如,实体类中有3个属性,但sql只提供了小于3的字段(属性),会报错。

class Item{
public int Id{get;set;}
public string Name{get;set;}
public DateTime Birthday{get;set;}
}

  如果使用下面的sql会报错。sql中提供了2个字段,但是实体类中有3个属性。

GetCurrentSession().CreateSQLQuery("select Id,Name from Item").AddEntity(new Item().GetType())

很多情况下,我们需要初始化部分属性。如果将结果实例化,那需要重新设计一个可持久化的类。这样可能会增加很多小类,非常不灵活。

幸运的是NHibernate为我们提供了另外一个方法List,将结果转化为object[].

GetCurrentSession().CreateSQLQuery("select Id,Name from Item").List<object[]>() as List<object[]>;

进一步将List<object[]>转化为强类型。

 List<object[]>.ConvertAll<Item>(new Converter<object[], Item>(
  delegate(object[] a) {
    return new Item(){Id =Convert.ToInt32(a[0]),Name=a[1].ToString()}
       } ));

 

转载于:https://www.cnblogs.com/lucika/p/4432209.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值