zoukankan      html  css  js  c++  java
  • Photon Server初识(二) ---通过NHibernate 映射数据库

    一、下载 NHibernate.dill 官网:https://nhibernate.info

     或者通过NuGet下载(详情看上一节)

    二、新建一个项目,并引入包

     

    引入包

     

    三、配置(重点)

      1、配置xml文件:(1)在项目根目录下新建文件 hibernate.cfg.xml  (配置数据库信息)

                (2)  新建文件夹 Model,里面新建model文件  DbModel.cs   (定义数据库表映射的model)

                (3)  新建文件夹Mappings,里面新建文件 DbModel.hbm.xml   (配置model和数据库表关联)

      2、调整文件属性

        (1)、hibernate.cfg.xml属性调整为始终复制

        (2)、DbModel.hbm.xml属性调整为嵌入的资源

     

      3、在项目根目录新建文件  hibernate.cfg.xml  (名字必须一样)

    <?xml version="1.0" encoding="utf-8"?>
    
    <hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
        <session-factory>
            <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
            
            <!-- mysql驱动这里是 MySQL5Dialect, mysql服务版本是5.7(最新版8.1好像链接不上) -->
            <property name="dialect">NHibernate.Dialect.MySQL5Dialect</property>
            
            <!-- 数据库连接信息 -->
            <property name="connection.connection_string">
                Server=localhost;Database=webdemo;User Id=root;Password=foto_cj1;
            </property>
    
            <!-- 调试时是否显示sql语句 -->
            <property name="show_sql">true</property>
            
            <!-- 有的版本需要添加下面这一项 -->
            <!-- <mapping assembly="Nbibernate"/> -->  
        </session-factory>
    </hibernate-configuration>

         

       4、配置model  文件DbModel.cs

    namespace Nbibernate.Model
    {
        public class DbModel
        {
            //字段跟数据库表列一样
            public virtual int Id { get; set; }
    
            public virtual string Name { get; set; }
    
            public virtual int Age { get; set; }
            public virtual string Title { get; set; }
        }
    }

      5、映射文件(models与数据库表关联) DbModel.hbm.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                       assembly="Nbibernate"
                       namespace="Nbibernate.Model">
    
        <class name="DbModel" table="netweb">
            <id name="Id" column="id" type="Int32">
                <generator class="native" />
            </id>
            <property name="Name" column="name" type="String" />
            <property name="Age" column="age" type="Int32" />
            <property name="Title" column="title" type="String" />
        </class>
    
    </hibernate-mapping>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                       assembly="Nbibernate"
                       namespace="Nbibernate.Model">

    assembly 项目名称 namespace 关联的Model文件得包路径
    <class name="DbModel" table="netweb"> name model类名 table 关联的数据库表名
    <id name="Id" column="id" type="Int32"> <generator class="native" /> </id> name Model的字段名, column 关联表的列名
    assembly 项目名称在这里查看:

     

      四、测试数据库连接,在Program.cs中添加测试代码

    namespace Nbibernate
    {
        internal class Program
        {
            public static void Main(string[] args)
            {
    
                var configuration = new Configuration();
                configuration.Configure();               //解析hibernate.cfg配置文件
                configuration.AddAssembly("Nbibernate"); //解析 映射文件 DbModel.hbm.xml (有的版本在映射文件添加了,该处可以省略)
    
                ISessionFactory sessFa = null;
                ISession session = null;
    //            ITransaction transaction = null;  //可以打开一个事务,处理多个操作时
                try
                {
                    sessFa = configuration.BuildSessionFactory();
                    session = sessFa.OpenSession();    //打开一个跟数据库的回话
    //                transaction = session.BeginTransaction();  //打开一个事务
    
                    var msg = new DbModel {Name = "Kiddd1111", Age = 13, Title = "Logeg"};
                    var msg2 = new DbModel {Name = "L2222", Age = 23, Title = "tiles"};
    
                    session.Save(msg);
                    session.Save(msg2);
    //                transaction.Commit();  //提交事务
    
                    Console.WriteLine("ddddddd");
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    throw;
                }
                finally
                {
    //                transaction?.Dispose();  // 关闭事务  -- c#的新语法 ,如果不为null,则关闭
                    session?.Close();
                    sessFa?.Close();
                }
    
                Console.WriteLine("dddddddd");
                Console.ReadKey();
            }
        }
    }
    View Code

      运行代码,数据库查看结果。

    参考文件:https://blog.csdn.net/qq_40323256/article/details/82914340

    参考视频:https://www.bilibili.com/video/av35109390/?p=12 

     
  • 相关阅读:
    Vue异步数据交互 promise axios async fetch
    JS数组或对象转为JSON字符换 JavaScript JSON.stringify()
    JS返回数组的最大值与最小值
    Error: Cannot find module './application'
    Express框架
    NodeJS项目制作流程
    模板引擎art-template
    基于NodeJS的网络响应原理与HTTP协议
    leetcode 953. 验证外星语词典 做题笔记
    leetcode 771. 宝石与石头 做题笔记
  • 原文地址:https://www.cnblogs.com/cj8988/p/11661866.html
Copyright © 2011-2022 走看看