zoukankan      html  css  js  c++  java
  • MySql(一)_利用NHibernate和MySql交互

    1.基础配置,添加MySql和nHibernate的引用

      (1)   添加引用,导入MySql.data.dll;   利用MySql提供的API操作;

    (2) 添加引用,导入NHibernate.dll;  利用nHibernate提供的API操作;

    利用NuGet管理程序包直接下载使用。

    2.修改“程序集名称”和“默认命名空间”,二者保持一致。

    3.如何跟MySql建立连接?

    (1)告诉nHibernate,连接什么样的数据库(MySql、SQLServer、Oracal),即数据库的种类。

    (2)告诉nHibernate,连接数据库的地址(IP地址、用户名、密码、连接的数据库)。

    (3)进行映射,把数据库的表映射成类,利用类创建对象,像操作对象一样操作数据库。

    第一步:配置nHiberate,去连接数据库的一些信息

                  配置nHiberate是使用XML来配置的。在项目下面右键“添加”——“新建项”,选择“XML文件”,名字为固定的  “nhibernate.cfg.xml”,nHibernate会自动读取此文件。

          

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <!-- 
     3 This template was written to work with NHibernate.Test.
     4 Copy the template to your NHibernate.Test project folder and rename it in hibernate.cfg.xml and change it 
     5 for your own use before compile tests in VisualStudio.
     6 -->
     7 <hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
     8   <session-factory name="NHibernate.Test">
     9     <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
    10     <property name="connection.connection_string">
    11       Database=unity;Data Source=localhost;User Id=root;Password=123456;
    12       Protocol=memory;Old Guids=True;
    13     </property>
    14     <property name="dialect">NHibernate.Dialect.MySQL5Dialect</property>
    15   </session-factory>
    16 </hibernate-configuration>

    根据提示修改即可。

    第二步,如何进行类和表的映射

    1.在项目下创建Model文件夹,进行与数据库中的表进行映射。在Model文件夹下,创建类,类名与相对应数据库的表名一致

       在类中创建相对应的属性(字段),与数据库中的列名保持一致。

    2.在项目文件下创建Mappings文件夹,创建“XML文件”,创建XML配置文件,配置文件命名“数据库的表名/类名.hbm.xml”。

     在Mapping下的xml配置文件中,配置命名空间、程序集;配置类名对应表名;配置类中的属性名对应表中的列名。

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
     3                    namespace="NBOWeb.Model" assembly="NBOWeb">
     4 
     5   <class name="unity" table="unity">
     6 
     7     <!-- A 32 hex character is our surrogate key. It's automatically
     8             generated by NHibernate with the UUID pattern. -->
     9     <id name="Id">
    10       <column name="Id" sql-type="INT"  length="11" not-null="true"/>
    11       <generator class="uuid.hex" />
    12     </id>
    13 
    14     <!-- A cat has to have a name, but it shouldn't be too long. -->
    15     <property name="Name">
    16       <column name="Name" sql-type="VarChar" length="8" />
    17     </property>
    18 
    19     <property name="Age">
    20       <column name="age" sql-type="INT" length="11" />
    21     </property>
    22     <property name="WorkAge" >
    23      <column name="workage" sql-type="INT" length="11"/>
    24     </property>
    25   </class>
    26 
    27 </hibernate-mapping>

    3.“nhibernate.cfg.xml”文件,属性-高级-“复制到输出目录设置为始终复制”;

      “数据库的表名/类名.hbm.xml”即“unity.hbm.xml”,属性-高级-生成操作-嵌入的资源;

    总结:首先配置命名空间和程序集;在进行类名与表名的配置;最后进行主键和一般的其他属性的配置。//配置映射关系完成。

    4.利用nHibernate进行操作

      1.让nHibernate进行配置的解析

         添加nHibernate和nHibernate.Cfg命名空间

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using NHibernate;
     7 using NHibernate.Cfg;
     8 using NBOWeb.Model;
     9 
    10 namespace MySql_StudyTest
    11 {
    12     class Program
    13     {
    14         static void Main(string[] args)
    15         {
    16             var configuration=new Configuration();                        
    17             configuration.Configure();             
    18             configuration.AddAssembly("NBOWeb");
    19             ISessionFactory sessionFactory = null;
    20             ITransaction transaction = null;
    21             ISession session = null;
    22             try
    23             {
    24                 sessionFactory = configuration.BuildSessionFactory();
    25                 session = sessionFactory.OpenSession();
    26 
    27                 //Unity unity = new Unity() {Name = "L.Juhnko", Age = 29, WorkAge = 10  };
    28                 //session.Save(unity);
    29 
    30                 //事务,对数据库更改 
    31                 transaction= session.BeginTransaction();//开启事务
    32                 Unity unity1 = new Unity() { Name = "ko01", Age = 29, WorkAge = 10 };
    33                 Unity unity2 = new Unity() { Name = "ko02", Age = 29, WorkAge = 10 };
    34 
    35                 session.Save(unity1);
    36                 session.Save(unity2);
    37                 transaction.Commit();//事务提交
    38             }
    39             catch (Exception e)
    40             {
    41                 Console.WriteLine(e);
    42                  
    43             }
    44             finally
    45 
    46             {
    47                 if (transaction!=null)
    48                 {
    49                     transaction.Dispose();
    50                 }
    51 
    52                 if (session!=null)
    53                 {
    54                     session.Close();
    55                 }
    56                 if (sessionFactory!=null)
    57                 {
    58                     sessionFactory.Close();
    59                 }
    60             }
    61             Console.ReadKey();
    62         }
    63     }
    64 }
  • 相关阅读:
    drupal中安装CKEditor文本编辑器,并配置图片上传功能 之 方法二
    drupal 开发笔记
    CSS选择器:子选择符号
    转:Redis和Memcache的区别分析
    转:php 获取memcache所有key
    Fatal error: Namespace declaration statement has to be the very first statement or after any declare call in the script in
    drupal7 boost模块为登录用户提供缓存
    转:drupal使用superfish建立下拉菜单
    RAID详解[RAID0/RAID1/RAID10/RAID5]
    DataV纪录
  • 原文地址:https://www.cnblogs.com/NBOWeb/p/10020009.html
Copyright © 2011-2022 走看看