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

NHibernate实例化类部分属性相关推荐

  1. python类的实例方法必须创建对象前还是后可以调用_classmethod可以来调用类的属性,类的方法,实例化对象...

    classmethod可以来调用类的属性,类的方法,实例化对象,今天番茄加速就来讲一下. classmethod() classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第 ...

  2. Python——类的属性与实例化

    类的属性与实例化 属性就是对类和对象特征的描述,外部以属性来区分不同的类,类具有数据属性和方法.而由类创建出来的实例-对象,具有它所属的类的数据属性和方法. 例如,书本是一个类,它具有作者.书名.出版 ...

  3. java 动态获取类实例化_Java:使用反射动态实例化类

    使用反射动态实例化类,可以在运行时根据参数实例化不同的类,比如使用简单的工厂模式. Factory类: public class Factory { public static Component g ...

  4. python设计模式(三):原型模式—快速实例化类的一种途径

    原型是相对于复制.克隆而言,但是不同于模板,模板创造出的东西是一模一样,而原型创造的东西是允许差异化和个性化存在,这就是原型. 原型模式最为核心的两点是:拷贝.属性更新:拷贝指深拷贝copy.deep ...

  5. 一个类的实例是另一个类的属性python_Python中的类属性和实例属性引发的一个坑...

    问题 今天在项目中遇到了个奇怪的问题,实例的一个时间属性并没有根据时间变化而变化,分析之后恍然大悟,总结下分享给大家.大家先看一段代码: import datetime import time cla ...

  6. Python 类的属性与实例属性

    放假归来 ~~~ 一.概念 类对象:类名 实例对象:通过类创建的对象 类属性:类对象所拥有的属性.归类所有,被类对象和实例对象所共有. 类的公有属性可以在类外被访问. 实例属性:实例对象所特有的属性, ...

  7. 类的属性、类的方法、类的内置方法

    类的属性 变量在类中称为类的属性,函数在类中称为类的方法,类的属性分为以下几种: (1) 公有属性:在类中和类外都能调用的属性,定义的时候与变量的定义一致,如 color = 'yellow' (2) ...

  8. php实例化类的方法,php实例化类的方法是什么

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  9. swift. 扩展类添加属性_swift中的声明关键字详解

    原起 学习swift,swift中的关键字当然要了解清楚了,最近在网上看到了关于声明关键字的文章,整理记录一下. 关键字是类似于标识符的保留字符序列,除非用重音符号(`)将其括起来,否则不能用作标识符 ...

最新文章

  1. PHP 利用AJAX获取网页并输出(原创自Zjmainstay)
  2. Redis是如何实现点赞、取消点赞的?
  3. 利用AVR单片机 专用下载 USBtinyISP对Arduino UNO下载程序
  4. IO测试工具之fio详解
  5. 在.net 中依据页的角色验证方式产生相匹配的菜单
  6. python 去掉list元素的双引号_一天快速入门 Python
  7. 最受Linux程序员欢迎的7个代码编辑器的介绍及下载地址
  8. sencha touch下,害人不浅的“*”号命名空间引入
  9. P4449-于神之怒加强版【莫比乌斯反演】
  10. 12款Javascript表格控件(DataGrid)
  11. Android应用开发进阶,2021Android最新大厂面试真题
  12. 2G/4G通信网络基本术语
  13. Unity shader系列:好用的IDE--JetBrain Rider
  14. 我们为什么需要实时数据库?
  15. 北京的互联网公司有哪些?
  16. 如何看计算机加密方式,电脑常见的几种加密的方法
  17. C语言开发过程中段错误处理方法之经典
  18. html css 边框不显示,css怎么设置不显示下边框?
  19. 第9章 虚拟存储器 学习笔记
  20. 构建用于签名/加密双证书测试体系的可执行命令

热门文章

  1. python调用linux命令输出结果,Python-运行shell命令并捕获输出
  2. hmailserver mysql密码_第二步:点晴MIS系统Email模块hMailServer数据库连接配置指引
  3. C 虚函数表及多态内部原理详解
  4. linux命令创建硬链接,Linux终端命令接口(十一)硬链接与软连接
  5. windows mysql is read only_mysql中Table is read only错误解决方法(转载)
  6. mysql+after+commit_Spring事务aftercommit原理及实践
  7. 卸载ncurses_linux中使用ncurses出现中文乱码解决方法
  8. android thrift https,HTTPS 学习
  9. web service接口_win7 添加环回网卡+H3C 模拟器 防火墙开启Web功能
  10. 隐藏水滴屏的软件_屏下摄像头,实现这一全面屏终极方案有多难?