欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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的类库

Nhibernate入门篇连接Sqlserver的增删查改

第五步:添加和数据库中类型相对应的类

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文件

第七步:添加智能提示

Nhibernate入门篇连接Sqlserver的增删查改

Nhibernate入门篇连接Sqlserver的增删查改

 

 

 第七步:将xml设置为内嵌的

Nhibernate入门篇连接Sqlserver的增删查改

 

 写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
    }
}

第一次写博客,如果有知识点没有说明白,请见谅