本节内容

  • 引入
  • 1.持久化类
  • 2.映射文件
  • 3.測试
  • 结语

引入

在数据库操作中,我们除了对表操作,还有视图、存储过程等操作,这一篇和下篇来学习这些内容。这篇我们来学习怎样在NHibernate中使用视图。首先,我们在数据库中建立一个名为viewCustomer视图。选中CustomerId、Firstname、Lastname、OrderId、OrderDate项。

以下我们依次为这个视图编写持久化类和映射吧。

1.持久化类

同持久化数据库中的表类似,我们须要对视图持久化,定义视图中的每一个属性,由于视图是仅仅读的,所以在这里我们仅仅要把属性的Setter设置为private訪问权限。

详细做法例如以下:

在项目DomainModel层的Entities目录中新建CustomerView.cs类,编写代码例如以下:

namespace DomainModel.Entities
{public class CustomerView{public virtual int CustomerId { get; private set; }public virtual string Firstname { get; private set; }public virtual string Lastname { get; private set; }public virtual int OrderId { get; private set; }public virtual DateTime OrderDate { get; private set; }}
}

2.映射文件

在项目DomainModel层的Mappings目录中新建CustomerView.hbm.xml文件。与映射数据库表类似。编写代码例如以下:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DomainModel" namespace="DomainModel"><class name="DomainModel.Entities.CustomerView,DomainModel" table="viewCustomer" mutable="false" ><id name="CustomerId" column="CustomerId" type="Int32"><generator class="native" /></id><property name="Firstname" column="Firstname" type="string" /><property name="Lastname" column="Lastname" type="string" /><property name="OrderId" column="OrderId" type="Int32" /><property name="OrderDate" column="OrderDate" type="DateTime" /></class>
</hibernate-mapping>

好了,到这里我们准备工作就做完了,即完毕了持久化和映射。

以下我们能够使用视图了。

3.測试

在数据訪问层(DAL)中编写一个方法获取订单时间在orderDate之后的顾客列表,方法例如以下:

public IList<CustomerView> GetCustomerView(DateTime orderDate)
{return _session.CreateCriteria(typeof(CustomerView)).Add(Restrictions.Gt("OrderDate", orderDate)).List<CustomerView>();
}

在数据訪问測试层(DAL.Test)中编写一个方法因为測试上面的方法。首先调用这种方法查询出订单时间在2008年10月1日之后的顾客列表。断言其订单时间是否大于2008年10月1日。

[Test]
public void GetCustomerViewTest()
{DateTime testorderDate = new DateTime(2008, 10, 1);IList<CustomerView> customers =_relation.GetCustomerView(testorderDate);foreach (CustomerView view in customers){Assert.GreaterOrEqual(view.OrderDate, testorderDate);}
}

OK!

測试通过。NHibernate生成SQL语句例如以下:

SELECT this_.CustomerId as CustomerId0_0_,this_.Firstname as Firstname0_0_,this_.Lastname as Lastname0_0_,this_.OrderId as OrderId0_0_,this_.OrderDate as OrderDate0_0_
FROM viewCustomer this_
WHERE this_.OrderDate > @p0; @p0 = '2008/10/1 0:00:00'

好了。到此我们学会了在NHibernate中怎样使用视图,是不是非常easy啊。

结语

通过这篇文章的展示,我们学习了在NHibernate中怎样使用视图,同表类似,仅仅是属性訪问权限不同罢了,假设你原来不知道怎样使用视图,网上到如今也没有相关资料认为无从下手,通过这篇文章的高速阅读,是不是使用视图非常easy,豁然开朗的样子(视图原来这样啊,没有什么神奇之处~~)。

下篇我们来看看NHibernate中使用储存过程,用过存储过程的朋友都知道。真是烦人,这个存储过程我真是弄了非常长时间。在实际运用中错误不断,我把它一一化解,请征集意见,大家说下篇是写一一化解的整个具体过程(涉及错误信息。怎样改动,2篇样子)还是直接讲正确方案(1篇搞定)。由你做主!

转载于:https://www.cnblogs.com/brucemengbm/p/6914178.html

NHibernate之旅(14):探索NHibernate中使用视图相关推荐

  1. NHibernate之旅(11):探索多对多关系及其关联查询

    本节内容 多对多关系引入 多对多映射关系 多对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 多对多关系引入 让我们再次回顾在第二篇中建立的数据模型 ...

  2. NHibernate之旅(10):探索父子(一对多)关联查询

    本节内容 关联查询引入 一对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 关联查询引入 在NHibernate中提供了三种查询方式给我们选择:NH ...

  3. NHibernate之旅(4):探索查询之条件查询(Criteria Query)

    本节内容 NHibernate中的查询方法 条件查询(Criteria Query) 1.创建ICriteria实例 2.结果集限制 3.结果集排序 4.一些说明 根据示例查询(Query By Ex ...

  4. [原创]Fluent NHibernate之旅

    ORM大家都非常熟悉了吧,我相信也有很多朋友正在用自己或者一些公开的框架,而最常用而且强大的,非Hibernate了(Net中为NHibernate),网上的文档非常多,不过在博客园中,介绍NHibe ...

  5. Fluent NHibernate之旅

    ORM大家都非常熟悉了吧,我相信也有很多朋友正在用自己或者一些公开的框架,而最常用而且强大的,非Hibernate了(Net中为NHibernate),网上的文档非常多,不过在博客园中,介绍NHibe ...

  6. 小猪的Python学习之旅 —— 14.项目实战:抓取豆瓣音乐Top 250数据存到Excel中

    小猪的Python学习之旅 -- 14.项目实战:抓取豆瓣音乐Top 250数据存到Excel中 标签:Python 一句话概括本文: 利用Excel存储爬到的抓取豆瓣音乐Top 250数据信息,还有 ...

  7. [App探索]JSBox中幽灵触发器的实现原理探索

    前言 幽灵触发器是钟颖大神的JSBox中的一个功能,在app进程被杀死的情况下,也可以将通知固定在通知栏,即便用户点击清除,也能马上再弹出,永远不消失,除非用户关闭App的通知权限或者卸载App,才可 ...

  8. [App探索]JSBox中幽灵触发器的实现原理探索 1

    建了一个面试题解答的项目,大家可以看一看,希望大家帮忙给一个star,谢谢了! 项目地址:https://github.com/NotFound9/interviewGuide 前言 幽灵触发器是钟颖 ...

  9. leetcode探索专题中的初级算法练习题(python代码+解题思路)

    本文记录leetcode探索专题中的初级算法练习题,附python实现代码&解题思路,做题过程不免查阅网络资料,侵删~如有错误,欢迎指正交流! 目录 专题一:数组: 26.从排序数组中删除重复 ...

最新文章

  1. 2018-2019-2 网络对抗技术 20165337 Exp4 恶意代码分析
  2. 未能创建Microsoft Visual C# 2008 编译器 解决方案【轉】
  3. python linecache模块读取文件用法详解
  4. mysql-数据表的定义操作
  5. Go单元测试--模拟服务请求和接口返回
  6. 情感极性分析:基于情感词典、k-NN、Bayes、最大熵、SVM的情感极性分析
  7. linux无法启动hbase密码,linux – 无法在请求的2181端口启动ZK,而导出HBASE_MANAGES_ZK = false...
  8. Android查看CPU和GPU使用率
  9. Winform 可取消的单选按钮(RadioButton)
  10. 使用visualSVN做版本管理
  11. Haar特征与积分图
  12. docker镜像下载的网站
  13. 汽车技术市场动态分析
  14. XP系统计算机桌面图标不见,win10桌面计算机图标不见了怎么办
  15. 连接服务器失败是什么原因
  16. 计算机应用软件弹窗消除,去除电脑弹窗广告的4种方法
  17. Geometric Transformation(几何变换)
  18. Tensorflow使用LSTM实现中文文本分类(1)
  19. AlphaMind:趋势跟踪及量化交易系统
  20. [杂言] GoodBye,2016

热门文章

  1. 【☢️伤害性不高,侮辱性极强!☢️】Win10更新21H1后关闭右下角天气和新闻
  2. SpringBoot 配置绑定
  3. DSP学习 -- C语言实现MySQL数据库操作
  4. STM32开发 -- 低功耗模式详解(1)
  5. DM8168 系统编译、启动、烧写
  6. 字符在计算机中是如何表示的?
  7. 【问链财经-区块链基础知识系列】 第四十一课 中外银行跨境业务运用区块链技术创新案例对比
  8. JZOJ 3899. 【NOIP2014模拟】逻辑的连通性
  9. java web文件夹_JAVA WEB项目文件夹上传下载解决方案
  10. python网络通信的几种方式_python网络-计算机网络基础(23)