程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> nhibernate使用基礎教程

nhibernate使用基礎教程

編輯:關於C#
 

使用步驟

1. 建立庫表

2. 建立映射對象

3. 建立映射文件

4. 編寫配置文件

5. 編寫程序

詳細說明

1. 建立庫表

 庫:    test
   表:    userinfo
   字段:uid char(10), pwd char(20) uid為主鍵

2. 建立映射對象

using System;

namespace testNHibernate
{
 /// <summary>
 /// UserInfo 的摘要說明。
 /// </summary>
 public class UserInfo
 {

  #region 域

  private string _userName;
  private string _password;

  #endregion

  #region 屬性

  public string userName
  {
   get 
   {
    return _userName;
   }
   set 
   {
    _userName = value;
   }
  }

  public string password 
  {
   get 
   {
    return _password;
   }
   set 
   {
    _password = value;
   }
  }

  #endregion
  #region 方法

  public UserInfo()
  {
   //
   // TODO: 在此處添加構造函數邏輯
   //
  }

  #endregion

 }
}

3. 建立映射文件

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">

 <class name="testNHibernate.UserInfo, testNHibernate" table="userinfo">
  <id name="userName" column="uid" type="String" length="10">
   <generator class="assigned" />
  </id>
  
  <property name="password" column="pwd" type="String" length="20"/>
 </class>
 
</hibernate-mapping>

說明:class元素中的class與hibernate中有些不同,除了名字空間,類名外,後面有個集合名,這個集合名不能隨便寫,一般寫名字空間就可以了。具體有什麼限制查找中。

4. 編寫配置文件

    在web.config或app.config中加入

  <configSections>
  
 <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
 
  </configSections>
   

  <nhibernate>
  <add 
   key="hibernate.show_sql"
   value="true"
  />
  <add 
   key="hibernate.connection.provider"          
   value="NHibernate.Connection.DriverConnectionProvider" 
  />
  <add 
   key="hibernate.dialect"                      
   value="NHibernate.Dialect.MsSql2000Dialect" 
  />
  <add 
   key="hibernate.connection.driver_class"          
   value="NHibernate.Driver.SqlClientDriver" 
  />
  <add 
   key="hibernate.connection.connection_string" 
   value="Server=127.0.0.1;initial catalog=test;User=sa;Password=1234" 
  />
  
 </nhibernate>
 
 <log4net debug="false">
  <appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
   <param name="File" value="Blueblog.log" />
   <param name="datePattern" value="MM-dd HH:mm" />
   <param name="AppendToFile" value="true" />
   <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="[blueblog] %-5p [%t] %d %C{1}.%M(%L) | %m%n" />
    
   </layout>
  </appender>
  <root>
   <level value="DEBUG" />
   <appender-ref ref="LogFileAppender" />
  </root>
 </log4net>

說明:log4net的配置並不是必須的。NHibernate的配置中,只有connection_string需要自己調整,看到網上的一些例子用SPPI登錄,實驗了多次沒有成功,在使用用戶名時,不要用User ID=xxx 中間一個空格會被不識別。直接用User就可以了。

       加上log4net是很好的習慣,NHibernate的一些運行都會被記錄在日志中。有些錯誤就可以看到。便於解決問題。

5. 編寫程序

log4net.ILog log = log4net.LogManager.GetLogger(this.GetType());
   
   try 
   {
    
    Configuration cfg = new Configuration();
    
    cfg.AddAssembly("testNHibernate");
    cfg.AddXmlFile("C://Inetpub//wwwroot//testNHibernate//UserInfo.hbm.xml");
    
    ISessionFactory sessionFactory = cfg.BuildSessionFactory();
    ISession session = sessionFactory.OpenSession();
    //ITransaction trans = session.BeginTransaction();
    
    UserInfo user = new UserInfo();
    user.userName = "yfpeng6";
    user.password = "yfpeng";
    session.Save(user);
    //trans.Commit();
    session.Flush();

    session.Close();
    
   }
   catch(Exception ex) 
   {
    Response.Write("<p>" + ex.Message);
    log.Error(ex.Message);
   }

說明:具體的操作和hibernate相同,只是下面兩句

    cfg.AddAssembly("testNHibernate");
    cfg.AddXmlFile("C://Inetpub//wwwroot//testNHibernate//UserInfo.hbm.xml");

    在我的這次測試中,nhibernate並沒有在配置文件中把hbm寫入其中。而是在這一一加載。(但我想應該也在在配置文件中加載的方法,測試中)。還有AddAssmbly參數為映射文件中class後面的那個集合,具體為什麼這樣還是不太明白。

6. 總結

編寫這個測試程序時,遇到不少問題,主要是配置和hibernate有些不同。 

 

在庫文件中要有

Iesi.Collections.dll

HashCodeProvider.dll

這兩個文件。不用引用到程序。但nhibernate會使用到。

將他們放在nhibernate相同的目錄下就可以了,系統會尋找後拷貝到bin/debug/下面。當然直接放進去也可以。

另外在配置文件中,主鍵要寫成

<generator class="assigned" />

否則主鍵會加不進去

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved