NHibernate 学习1 11月20日

   总算成功了。。。基本入门了。。能用session.save() 了~~~

中间碰到了无数问题。。。自己总结一下。。。。。

 主要是 Could not compile the mapping document 这个问题困扰我很久。。原来是根据NHibernnate的版本不同 设置的App.config就不同.

我用的是最新版本 NHibernate 2.1.1

    下面的代码是标准的 ~~ 经过测试绝对不会错了!!

首先创建一个类库 ClassLibrary这是我取的名字

 

1.创建个App.config 如果是web.config的话也差不多的 把下面的复制过去就可以了

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <configSections>
  <section name="hibernate-configuration"
  type="NHibernate.Cfg.ConfigurationSectionHandler,NHibernate"/>

 </configSections>

 <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
   <property name="connection.provider">
    NHibernate.Connection.DriverConnectionProvider
   </property>
   <property name="dialect">
    NHibernate.Dialect.MsSql2005Dialect
   </property>
   <property name="connection.driver_class">
    NHibernate.Driver.SqlClientDriver
   </property>
   <property name="connection.connection_string">
    Data Source=.;Integrated Security=True; initial catalog=test ;User ID=sa;Password=123456
   </property>
   <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>

    用上面这行代码的话 要引用一些DLL文件LinFu 还有个castle 不写这个属性会报一个错误

  </session-factory>
 </hibernate-configuration>
</configuration>

 

  2 。配置文件好了。那然后是 映射文件 (红字是注释)

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
 <class name="ClassLibrary.User, ClassLibrary" table="users" lazy="false">

     name属性里面 "命名空间.类,命名空间" table是数据库表
  <id name="Id" column="LogonId" type="int" length="50">
   <generator class="identity" />

    class属性里面设置成identity 表示自动增长, (不是SQL的话用其他的) 这东西害我弄了很久很久。。设置错了会在事务提交的时候报错
  </id>
  <property name="UserName" column="Name" type="String" length="50"/>

  里面name的值 是User类里面那些 字段的属性名 不是字段名哦~~~,这问题困扰了大概1小时多~~~ length要设置正确

 column是数据库表的字段 不要写错了。。~~~ 只有一个name属性 代表 数据库表和类的字段名称是一样的

  <property name="Password" type="String" length="50"/>
  <property name="EmailAddress" type="String" length="50"/>
  <property name="LastLogon" type="DateTime"/>
 </class>
</hibernate-mapping>

 重要的一点就是要把这个映射文件设置成 嵌入的资源

3.类和数据库我就不写了,对应这个映射文件就可以了

4.编写一个Form1.cs

 

using System.Drawing;
using System.Text;
using System.Windows.Forms;
using NHibernate;
using NHibernate.Cfg;
using ClassLibrary;
using System;

namespace Nhibernate1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            //Configuration cfg = new Configuration().AddAssembly("ClassLibrary");
            //ISessionFactory factory = cfg.BuildSessionFactory();
            //ISession session = factory.OpenSession();
            ISession session = new Configuration().AddAssembly("ClassLibrary").BuildSessionFactory().OpenSession();

                 //我这里直接获得session对象了,上面那3个//是步骤 
            ITransaction transaction = session.BeginTransaction();

            User newUser = new User();
            newUser.UserName = "Joseph Cool";
            newUser.Password = "abc123";
            newUser.EmailAddress = "
joe@cool.com";
            newUser.LastLogon = DateTime.Now;

            // Tell NHibernate that this object should be saved
            session.Save(newUser);

            // commit all of the changes to the DB and close the ISession
            transaction.Commit();
            session.Close();

            MessageBox.Show("OK!");
        }
    }
}

感觉代码跟jave 里是一样的 但配置还真的没java里舒服

   7个步骤 

   1. 创建一个Configuration

   2. 设置它的映射文件路径 cfg.AddAssembly("命名空间");

   3. 获得一个ISessionFactory

   4. 获得一个session

   5. 创建一个事务ITransaction

   6 . 然后就是你要做的事

   7 . 提交事物和关闭Session对象   

转载于:https://www.cnblogs.com/zhongmingxing/archive/2009/11/20/1607015.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值