NHibernate教程(14)--使用视图
本节内容
- 引入
- 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篇搞定)。由你做主!
NHibernate教程(14)--使用视图的更多相关文章
- 深度学习与CV教程(14) | 图像分割 (FCN,SegNet,U-Net,PSPNet,DeepLab,RefineNet)
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...
- iOS10 UI教程基改变视图的外观与视图的可见性
iOS10 UI教程基改变视图的外观与视图的可见性 视图是应用程序的界面,是用户在屏幕上看到的对象.用户可以通过触摸视图上的对象与应用程序进行交互,所以视图界面的优劣会直接影响到了客户体验的好坏.和视 ...
- Laravel教程 三:视图变量传递和Blade
Laravel教程 三:视图变量传递和Blade 此文章为原创文章,未经同意,禁止转载. Blade 上一篇我们简单地说了Router,Views和Controllers的工作流程,这一次我就按照上一 ...
- NHibernate教程
NHibernate教程 一.NHibernate简介 在今日的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦.浪费时间的.NHibernate是一个面向.Net环境的对象/关系数据库 ...
- ASP.NET MVC 5 学习教程:修改视图和布局页
原文 ASP.NET MVC 5 学习教程:修改视图和布局页 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 ...
- ASP.NET MVC 5 学习教程:添加视图
原文 ASP.NET MVC 5 学习教程:添加视图 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控 ...
- [SQL基础教程]1-4 SQL 表的创建
[SQL基础教程]1-4 SQL 表的创建 创建数据库 语法 CREATE DATABASE <数据库名称> // example CREATE DATABASE shop; 创建表 语法 ...
- Xamarin iOS教程之自定义视图
Xamarin iOS教程之自定义视图 Xamarin iOS自定义视图 工具栏中的视图在实际应用开发中用的很多,但是为了吸引用户的眼球,开发者可以做出一些自定义的视图. [示例2-33]以下将实现一 ...
- Xamarin iOS教程之警告视图
Xamarin iOS教程之警告视图 Xamarin iOS警告视图 如果需要向用户显示一条非常重要的消息时,警告视图(UIAlertView类)就可以派上用场了.它的功能是把需要注意的信息显示给用户 ...
随机推荐
- svn本地目录结构for window
演示内容: 使用svn目录结构来进行备份正式版和修复版本,最终合并修复版本.主干上的版本. 使用工具: visualSVN server 服务器软件工具 TortoiseSVN客户端工具 1.服务器的 ...
- Apache安装编译遇到APR的问题
http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.27.tar.bz2Apache下载链接 在解压Apache源码包进入目录运行 ...
- JS获取字符串长度(区分中英文)
JS获取字符串长度(区分中英文) 中文算2个字,英文一个. function getStrLength(str) { var cArr = str.match(/[^\x00-\xff]/i ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(999)-如何使用这个系统来开发?
前言 这篇文本讲述了这个框架的使用方式,及一些疑问的答疑,更加精准的使用这个框架来建立功能 经过几个版本的迭代,系统使用更加方便,代码更加简洁也更加的智能,所以之前61节的文章也需要重新编排 对项目的 ...
- vcruntime140.dll丢失解决
之前安装好apache2.4后,打开突然报这样的错误,所以百度一下,发现了问题所在,原因是系统需要安装一个插件,才能正常运行apache2.4 Microsoft Visual C++ 2005 Re ...
- spring-session实现分布式集群session的共享
前言 HttpSession是通过Servlet容器创建和管理的,像Tomcat/Jetty都是保存在内存中的.但是我们把应用搭建成分布式的集群,然后利用LVS或Nginx做负载均衡,那么来自同一用户 ...
- html2canvas页面截图图片不显示
前两天在一个群里,有人问使用html2canvas屏幕截图的时候为什么页面的图片不显示只显示了文字,我没有做过屏幕截图的需求,所以不是很清楚,今天稍稍测试了一下. 在github上将html2canv ...
- 【机器学习笔记之四】Adaboost 算法
本文结构: 什么是集成学习? 为什么集成的效果就会好于单个学习器? 如何生成个体学习器? 什么是 Boosting? Adaboost 算法? 什么是集成学习 集成学习就是将多个弱的学习器结合起来组成 ...
- Python 继承和组合 接口
#解决代码重用的问题,减少代码冗余 #继承是一种什么'是'什么的关系 class People: def __init__(self, name, age): # print('People.__in ...
- Mac OS X 终端命令开启功能
1.系统目录下显示资源库2.Finder显示隐藏文件3.Xcode卸载4.在Finder标题栏显示完整路径5.去掉窗口截屏的阴影6.强制Safari在新标签中打开网页7.改变截屏图片的保存位置 1.系 ...