跟我学习NHibernate (1)
引言:Nibernate概述
NHibernate是一个ORM框架,NHibernate是一个把C#对象世界和关系世界数据库之间联系起来的一座桥梁。NHibernate 能自动映射实体模型到数据库,所以这能让你集中考虑一件或多件事情。
1.给Program.cs文件添加代码
注意:以下程序仅供参考,不作为运行的依据。由于本文过旧,所以你必须从控制台进行安装,安装命令为: install-package NHibernate -version 2.1.2.4000
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate.Cfg;
using NHibernate;
using System.Reflection; namespace NHibernatePets
{
public class Pet
{
virtual public int id { get; set; }
virtual public string PetName { get; set; }
virtual public string Species { get; set; }
virtual public DateTime Birthday { get; set; } virtual public string Speak()
{
return "你好!我的名字是 " + PetName + ",我是一个" + Species + " 以及我生日是" + Birthday;
} } public class Program
{
public static void Main(string[] args)
{
Pet peter = new Pet { PetName="peter",Species="Cat",Birthday=new DateTime(,,)};
Console.WriteLine(peter.Speak()); //把peter保存到数据库里面去
try
{
using (ISession session = OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Save(peter);
transaction.Commit();
}
Console.WriteLine("peter已经保存到数据库!");
} //从数据库里读取peter
using (ISession session = OpenSession())
{
IQuery query = session.CreateQuery("From Pet");
IList<Pet> pets = query.List<Pet>();
Console.Out.WriteLine("宠物的个数:" + pets.Count);
pets.ToList().ForEach(p => Console.WriteLine(p.Speak()));
} //更新宠物信息
using (ISession session = OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
IQuery query = session.CreateQuery("From Pet where PetName='peter'");
Pet pet = query.List<Pet>()[];
pet.PetName="Jason";
transaction.Commit();
}
} //再次从数据库里读取所有的信息
using (ISession session = OpenSession())
{
IQuery query = session.CreateQuery("From Pet");
IList<Pet> pets = query.List<Pet>();
Console.Out.WriteLine("宠物的个数:" + pets.Count);
pets.ToList().ForEach(p => Console.WriteLine(p.Speak()));
} //删除宠物信息
using (ISession session = OpenSession())
{
using (ITransaction transation = session.BeginTransaction())
{
IQuery query = session.CreateQuery("From Pet where PetName='Jason'");
Pet pet = query.List<Pet>()[];
session.Delete(pet);
transation.Commit();
} } }
catch (Exception e)
{
Console.WriteLine(e);
} } static ISessionFactory SessionFactory;
static ISession OpenSession()
{
//注意这种方式不是线程安全的
//SessionFactory会话费大量的资源,只创建一次
if (SessionFactory == null)
{
Configuration configuration = new Configuration();
configuration.AddAssembly(Assembly.GetCallingAssembly());
SessionFactory = configuration.BuildSessionFactory();
} return SessionFactory.OpenSession();
} }
}
跟我学习NHibernate (1)的更多相关文章
- 一步步学习NHibernate(1)——NHibernate介绍
请注明转载地址:http://www.cnblogs.com/arhat 第十五章 从本章开始,老魏将给大家一起学习NHibernate这个流行的ORM框架,本来老魏想要和大家一起探讨微软的EF框架的 ...
- 一步步学习NHibernate(9)——连接查询和子查询(1)
请注明转载地址:http://www.cnblogs.com/arhat 在前几章中,我们把HQL的基本查询学习了一下,但是只有基本查询很显然不能满足我们的需求,那么就需要一下复杂查询比如" ...
- 一步步学习NHibernate(8)——HQL查询(2)
请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,老魏带着大家学习了HQL语句,发现HQL语句还是非常不错的,尤其是在懒加载的时候,书写起来比较的舒服,但是这里老魏 ...
- 一步步学习NHibernate(7)——HQL查询(1)
请注明转载地址:http://www.cnblogs.com/arhat 从本章开始,老魏带着大家来学习一下HQL语句.HQL语句NHibernate为我们提供的一种功能比较强大的查询语句,这个HQL ...
- 一步步学习NHibernate(6)——ISession的管理
请注明转载地址:http://www.cnblogs.com/arhat 今天老魏那个汗啊,我的ThinkPad的电源线不通电了,擦啊.明天还得掏银子买一个!心疼啊,原装的啊.不过话说回来,已经用了将 ...
- 一步步学习NHibernate(5)——多对一,一对多,懒加载(2)
请注明转载地址:http://www.cnblogs.com/arhat 通过上一章的学习,我们建立了Student和Clazz之间的关联属性,并从Student(many)的一方查看了Clazz的信 ...
- 一步步学习NHibernate(4)——多对一,一对多,懒加载(1)
请注明转载地址:http://www.cnblogs.com/arhat 通过上一章的学习,我们学会如何使用NHibernate对数据的简单查询,删除,更新和插入,那么如果说仅仅是这样的话,那么NHi ...
- 一步步学习NHibernate(3)——NHibernate增删改查
请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们配置了以下NHibernate的运行环境, 并介绍了NHibernate的中两个非常中重要的接口"I ...
- 一步步学习NHibernate(10)——连接查询和子查询(2)
请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,老魏讲述了HQL的链接查询,本章呢,老魏开始讲述HQL的子查询.子查询在SQL中也是占据着非常重要的作用,如果没有 ...
随机推荐
- 使用Python保存屏幕截图(不使用PIL)
起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...
- AndroidTips-052:.aar文件依赖
aar aar 文件是android 类库项目的输出文件,其中可以包含普通的.class,清单,以及android项目特有的资源文件. 使用方式 将.aar文件放在在自己项目的libs目录下 在gra ...
- 【社工】NodeJS 应用仓库钓鱼
前言 城堡总是从内部攻破的.再强大的系统,也得通过人来控制.如果将入侵直接从人这个环节发起,那么再坚固的防线,也都成为摆设. 下面分享一个例子,利用应用仓库,渗透到开发人员的系统中. 应用仓库 应用仓 ...
- JavaScript Object对象
目录 1. 介绍:阐述 Object 对象. 2. 构造函数:介绍 Object 对象的构造函数. 3. 实例属性:介绍 Object 对象的实例属性:prototype.constructor等等. ...
- 关于Android避免按钮重复点击事件
最近测试人员测试我们的APP的时候,喜欢快速点击某个按钮,出现一个页面出现多次,测试人员能不能禁止这样.我自己点击了几下,确实存在这个问题,也感觉用户体验不太好.于是乎后来我搜了下加一个方法放在我们U ...
- Android之SAX解析XML
一.SAX解析方法介绍 SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备. SAX解析器是一种基于事件的解析器,事件驱动 ...
- iOS--->微信支付小结
iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...
- photoshop:无法完成请求 因为暂存盘已满
今天photoshop打开一个问题,提醒:无法完成请求因为暂存盘已满 不用担心这个问题很好解决可能是你做的图比较大并不需要清理C盘空间 选择:编辑→首选项→暂存盘 设置第一暂存盘为D盘或E盘 总之 第 ...
- JavaMail发送邮件
发送邮件包含的内容有: from字段 --用于指明发件人 to字段 --用于指明收件人 subject字段 --用于说明邮件主题 cc字段 -- 抄送,将邮件发送给收件人的同时抄 ...
- 学习笔记:URL Protocol在浏览器中打开本地应用程序
看到阿里的网站上可以通过点击卖家的旺旺图标从而调用本地的阿里旺旺程序,而且还可以传递当前浏览者需要咨询的商品.这是怎么实现的呢?是通过URLProtocol来完成. 原理还没有太清楚,即在系统里注册一 ...