本节内容

  • 引入
  • 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中如何使用视图,是不是很简单啊。

结语

通过这篇文章的展示,我们学习了在NHibernate中如何使用视图,同表类似,只是属性访问权限不同罢了,如果你原来不知道如何使用视图,网上到现在也没有相关资料觉得无从下手,通过这篇文章的快速阅读,是不是使用视图非常简单,豁然开朗的样子(视图原来这样啊,没有什么神秘之处~~)。下篇我们来看看NHibernate中使用储存过程,用过存储过程的朋友都知道,真是烦人,这个存储过程我真是弄了很长时间,在实际运用中错误不断,我把它一一化解,请征集意见,大家说下篇是写一一化解的整个详细过程(涉及错误信息,如何修改,2篇样子)还是直接讲正确方案(1篇搞定)。由你做主!

转载于:https://www.cnblogs.com/zhengwei-cq/p/7384474.html

NHibernate教程(14)--使用视图相关推荐

  1. iOS10 UI教程基改变视图的外观与视图的可见性

    iOS10 UI教程基改变视图的外观与视图的可见性 视图是应用程序的界面,是用户在屏幕上看到的对象.用户可以通过触摸视图上的对象与应用程序进行交互,所以视图界面的优劣会直接影响到了客户体验的好坏.和视 ...

  2. ​Xamarin iOS教程之自定义视图

    ​Xamarin iOS教程之自定义视图 Xamarin iOS自定义视图 工具栏中的视图在实际应用开发中用的很多,但是为了吸引用户的眼球,开发者可以做出一些自定义的视图. [示例2-33]以下将实现 ...

  3. Xamarin iOS教程之警告视图

    Xamarin iOS教程之警告视图 Xamarin iOS警告视图 如果需要向用户显示一条非常重要的消息时,警告视图(UIAlertView类)就可以派上用场了.它的功能是把需要注意的信息显示给用户 ...

  4. Directx11教程(14) D3D11管线(2)

    Directx11教程(14) D3D11管线(2) 原文:Directx11教程(14) D3D11管线(2) 下面我们来了解一些GPU memory的知识,主要参考资料:http://fgiese ...

  5. STM32 进阶教程 14 - 程序加密之FLASH读写保护

    前言 在嵌入式应用开发中,应用开发完成后往往需要对芯片中的程序进行加密处理,用以保护程序安全(不至被竞争对手从芯片把程序固件考走),本节将给大学介绍一个如何实现程序自动给芯片加密功能.学完本节内容,你 ...

  6. STM32 基础系列教程 14 - IIC

    前言 学习stm32 IIC接口的使用,用IIC 接口实现与IIC设备的通信功能. 示例详解 基于硬件平台: STM32F103C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使 ...

  7. Django 3.2.5博客开发教程:URL与视图函数

    在讲URL与视图函数之前我们先给大家简单介绍一下用户访问网站的流程.我们访问一个网站的时候,一般先打开浏览器,然后在浏览器的地址栏里输入一个网址,也就是URL,然后回车,我们就可以在浏览器里看到这个网 ...

  8. [SQL基础教程]1-4 SQL 表的创建

    [SQL基础教程]1-4 SQL 表的创建 创建数据库 语法 CREATE DATABASE <数据库名称> // example CREATE DATABASE shop; 创建表 语法 ...

  9. [译][Tkinter 教程14] menu 菜单

    已获原作者授权. 原系列地址: Python Tkinter 简介 一提到"menu"这个词, 很多人首先想到的是餐馆里的菜单. 虽然餐馆菜单和计算机程序中的菜单看起来一点也不像, ...

  10. SAP UI5 初学者教程之五:视图控制器初探 试读版

    Jerry 从 2014 年加入 SAP成都研究院 CRM Fiori 开发团队之后开始接触 SAP UI5,曾经在 SAP 社区和"汪子熙"微信公众号上发表过多篇关于 SAP U ...

最新文章

  1. java 音频电台_Java-通过Java套接字广播语音
  2. tomcat苹果版安装步骤_mac系统安装apache tomcat配置方法图文详解
  3. 你在发表理科学术文章过程中有哪些经验值得借鉴
  4. python 时间序列预测 币价_python时间序列预测股票走势
  5. C++trie树的多重搜索算法的实现(附完整源码)
  6. java jsp中控件绑定_jsp页面常用控件
  7. 根据企业信息化应用需求来分析工作流平台的选型
  8. 数据结构--双链表的创建和操作
  9. mysql 表名通配符导出,mysqldump只有某些前缀/ Mysqldump通配符的表?
  10. maven项目引入sqljdbc4 找不到包的完美 解决方案。
  11. 高中女销售学Linux云计算4个月搞定年薪12万
  12. ArcGIS土地利用转移矩阵(附土地利用数据下载)
  13. 管家婆服装.NET II TOP V6.5-VIP卡使用注意事项(一)
  14. hightopo学习之旅一 -- 节点动画
  15. 揭露培训机构以招聘名义变相招生的欺诈套路!【附上企业黑名单】
  16. css3直线运动_纯css3动画--边框线条动画
  17. 字符串、bute[]数组和十六进制字符串的相互转换
  18. 实用帖!分享5个素材丰富的资源网站
  19. 【Unity】新手初学Animation实现人物移动
  20. 微信小程序开发部署上线流程

热门文章

  1. BGP选路规则和负载分担
  2. OSPF邻接关系建立过程
  3. LAMP架构调优(六)——开启长链接
  4. urllib.error.URLError: <urlopen error [SSL: WRONG_VERSION_NUMBER] wrong version number 成功解决
  5. 时间复杂度,贪心算法解最大团问题,回溯算法解0-1背包问题(仅步骤)
  6. 滴滴披露语音识别新进展:基于Attention显著提升中文识别率
  7. Android 应用的启动方式
  8. 一个轻client,多语言支持,去中心化,自己主动负载,可扩展的实时数据写服务的实现方案讨论...
  9. WordPress缓存插件WP-Super-Cache安装使用
  10. python处理pdf文件_python处理操作pdf全攻略