zoukankan      html  css  js  c++  java
  • Nhibernate入门篇连接Sqlserver的增删查改

    第一步:创建数据库

    create table Emp(
      EmpId int primary key identity,
      EmpName varchar(50),
      EmpDate date
    )

    第二步:去官网下载:http://nhibernate.info/  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
        }
    }

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

  • 相关阅读:
    BlogEngine.Net架构与源代码分析系列part5:对象搜索——IPublishable与Search
    SqlCacheDependency
    Office SharePoint Server 2007
    Castle Active Record for .NET2.0快速入门示例
    PetShop的系统架构第三篇
    中文分词核心配置
    BlogEngine.Net架构与源代码分析系列part3:数据存储——基于Provider模式的实现
    Cocos2d开发系列(二)
    高负载、高并发网站架构知识汇总大流量网站架构的几点认识
    使用Application变量
  • 原文地址:https://www.cnblogs.com/pandorabox/p/PandoraBox.html
Copyright © 2011-2022 走看看