(纯属学习记录)
https://www.hibernate.org/343.html 上下载个NHibernate release:2.0.1GA
然后参照 Nhibernat quick start guide(https://www.hibernate.org/362.html)
不做全盘翻译 只把基本步骤和碰到的错误记录
Here are the steps we are going to perform:
- Create the table to persist the .NET class to.(在数据库建表)
- Create a .NET class that needs to be persisted.(生成表对应的持久类)
- Create a mapping file so NHibernate knows how to persist the .NET class' properties(生成隐射XML文件)
- Create a configuration file for NHibernate to know how to connect to your database(在web.config里建立数据库连接等配置)
- Use the NHibernate API(用NHibernate类操作数据)
1.建表 SQL如下
go
CREATE TABLE users (
LogonID nvarchar ( 20 ) NOT NULL default ' 0 ' ,
Name nvarchar ( 40 ) default NULL ,
Password nvarchar ( 20 ) default NULL ,
EmailAddress nvarchar ( 40 ) default NULL ,
LastLogon datetime default NULL ,
PRIMARY KEY (LogonID)
)
go
2.新建C#类库文件 命名NHibernate.Examples
namespace NHibernate.Examples.QuickStart
{
public class User
{
private string id;
private string userName;
private string password;
private string emailAddress;
private DateTime lastLogon;
public User()
{
}
public string Id
{
get { return id; }
set { id = value; }
}
public string UserName
{
get { return userName; }
set { userName = value; }
}
public string Password
{
get { return password; }
set { password = value; }
}
public string EmailAddress
{
get { return emailAddress; }
set { emailAddress = value; }
}
public DateTime LastLogon
{
get { return lastLogon; }
set { lastLogon = value; }
}
}
}
3.映射xml文件(User.xml)
< hibernate-mapping xmlns ="urn:nhibernate-mapping-2.0" >
< class name ="NHibernate.Examples.QuickStart.User, NHibernate.Examples" table ="users" >
< id name ="Id" column ="LogonId" type ="String" length ="20" >
< generator class ="assigned" />
</ id >
< property name ="UserName" column ="Name" type ="String" length ="40" />
< property name ="Password" type ="String" length ="20" />
< property name ="EmailAddress" type ="String" length ="40" />
< property name ="LastLogon" type ="DateTime" />
</ class >
</ hibernate-mapping >
-
(
注意:可以用其他的方法去配置哪个CLASS对应哪个映射XML,这里用最简单的方法,在类的同项目下建个同名的 xml)
4.配置数据库连接(在webconfig里面配置)
< configuration >
< configSections >
< section
name ="nhibernate"
type ="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
/>
</ configSections >
< nhibernate >
< 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=localhost;initial catalog=nhibernate;Integrated Security=SSPI"
/>
</ nhibernate >
</ configuration >
5.调用NHibernate类进行插入操作(引用下载Nhibernate里面的Nhibernate.dll,log4net.dll,Iesi.Collections.dll)
using NHibernate.Cfg;
using NHibernate;
// that are going on between .NET classes and the backend database.
NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
// The Configuration object will look through the assembly for any files ending in .hbm.xml.
// There are other ways to add the mapping files, but this is probably the easiest.
// The other way is to mapping the CLASS and the mapping xml in the web config
cfg.AddAssembly( " NHibernate.Examples " );
ISessionFactory factory = cfg.BuildSessionFactory();
ISession session = factory.OpenSession();
ITransaction transaction = session.BeginTransaction();
NHibernate.Examples.QuickStart.User user = new NHibernate.Examples.QuickStart.User();
user.Id = " 2 " ;
user.LastLogon = DateTime.Now;
user.Password = " 123456 " ;
user.UserName = " T-Mac " ;
user.EmailAddress = " t_mac@nba.com " ;
// Tell NHibernate that this object should be saved
session.Save(user);
// commit all of the changes to the DB and close the ISession
transaction.Commit();
session.Close();
以上步骤是对的,但是会报Could not find the dialect in the configuration这个错误,这是数据库配置问题 ,
因为这个教程版本是1....的,所以要更改一些东西1.
1.映射xml文件(User.xml) 里面
换成
2.数据库配置要改(我用的是sqlserver2005)
< 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=AA\BL;Integrated Security=True; initial catalog=NHibernate
</ property >
< property name ="proxyfactory.factory_class" >
NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu
</ property >
</ session-factory >
</ hibernate-configuration >
这样运行会报另外一个错The ProxyFactoryFactory was not configured. 因为没有引用上面那个配置中的工厂类
所以在引用下 Required_For_LazyLoading文件夹下的 LinFu下的NHibernate.ByteCode.LinFu.dll
当然也可以用 Castle 那要改下配置
基本上可以运行成功了~
哦 忘了 要把类里面的那些字段前面全部加上 virtual 修饰符