Nhibernate入门篇连接Sqlserver的增删查改
程序员文章站
2022-04-09 08:41:03
第一步:创建数据库 第二步:去官网下载:http://nhibernate.info/ nhibernate 第三步:创建一个vs项目 第四步:添加nhibernate的类库 第五步:添加和数据库中类型相对应的类 using System;using System.Collections.Gener ......
第一步:创建数据库
create table emp( empid int primary key identity, empname varchar(50), empdate date )
第二步:去官网下载: nhibernate
第三步:创建一个vs项目
第四步:添加nhibernate的类库
第五步:添加和数据库中类型相对应的类
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace nhibernatedemoapp
{
public class emp
{
public virtual int empid { get; set; }
public virtual string empname { get; set; }
public virtual datetime empdate { get; set; }
}
}
第六步:创建emp.hbl.xml文件
第七步:添加智能提示
第七步:将xml设置为内嵌的
写xml的代码
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="nhibernatedemoapp" namespace="nhibernatedemoapp"> <class name="emp" table="emp"> <id name="empid"> <generator class="native"/> </id> <property name="empname"></property> <property name="empdate"></property> </class> </hibernate-mapping>
- 注意hibernate-mapping的assembly、namespace属性要填写正确
- class的name属性表示类名,table是映射的表名,如果类名称和表名称相同,可以省略table属性
- property的name属性是类的属性名,如果类属性名和表的列名相同,可以省略column属性
- property的type属性表示.net类属性映射的nhibernate数据类型。如果是int、bool、double这样的.net基础数据类型,则可以省略
- property的type属性如果是datetime、string,也可以省略
- property的not-null属性对应关系表的列的nullable属性,默认值是false。因此,如果允许为空,则可以省略
- id表示主键,name为主键名,<generator class="native"/>表示数据表的主键按简单identity的自增算法生成新记录主键值(nhibernate提供了多种主键值生成算法,这里只用最简单的identity算法)
- 文件名必须以.hbm.xml结尾
下载开始写正式的增删查改的代码:
using system; using system.collections.generic; using system.linq; using system.text; using system.threading.tasks; using nhibernate; using nhibernate.cfg; using nhibernate.dialect; using nhibernate.driver; using system.reflection; namespace nhibernatedemoapp { class program { private static isessionfactory _sessionfactory; public static isessionfactory sessionfactory { get { if (_sessionfactory == null) { var cfg = new configuration(); cfg.databaseintegration(x => { x.connectionstring = "data source=localhost;initial catalog=nhibernatedemodb;integrated security=true;connect timeout=15;encrypt=false;trustservercertificate=false;applicationintent=readwrite;multisubnetfailover=false"; x.driver<sqlclientdriver>(); x.dialect<mssql2008dialect>(); }); //告诉nhibernate加载xml的地方 cfg.addassembly(assembly.getexecutingassembly()); //构建nhibernate _sessionfactory = cfg.buildsessionfactory(); } return _sessionfactory; } } static void main(string[] args) { ilist<emp> emps = getall(); foreach (var item in emps) { console.writeline(item.empname); } console.readkey(); } #region crud public static int insert(emp emp) { using(var session = sessionfactory.opensession()) { var i= session.save(emp); session.flush();//相当于savechange return convert.toint32(i); } } public static void delete(int id) { using(var session = sessionfactory.opensession()) { var entity= session.load<emp>(id); session.delete(entity); session.flush(); } } public static void update(emp emp) { using(var session = sessionfactory.opensession()) { session.saveorupdate(emp); session.flush(); } } public static emp getempbyid(int id) { using(var session = sessionfactory.opensession()) { emp emp = session.get<emp>(id); return emp; } } public static ilist<emp> getall() { using(var session = sessionfactory.opensession()) { ilist<emp> emps = session.createcriteria<emp>().list<emp>(); return emps; } } #endregion } }
第一次写博客,如果有知识点没有说明白,请见谅
上一篇: [WPF自定义控件库] 自定义控件的代码如何与ControlTemplate交互
下一篇: 便携带法