zoukankan      html  css  js  c++  java
  • 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()}
           } ));
  • 相关阅读:
    斐波那契数列
    斐波那契数列
    .NET (C#)ASP.NET 应用程序与页面生命周期
    .NET (C#) Internals: ASP.NET 应用程序与页面生命周期(意译)
    如何使用:before和:after伪元素?
    学习的网址
    css盒子(box)
    利用Asp.Net来实现“网络硬盘”功能
    Jtemplates ${} or {{html}}的区别
    Jtemplate
  • 原文地址:https://www.cnblogs.com/lucika/p/4432209.html
Copyright © 2011-2022 走看看