惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
博客园 - 聂微东
雷峰网
雷峰网
Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
Hugging Face - Blog
Hugging Face - Blog
S
SegmentFault 最新的问题
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
博客园 - 司徒正美
爱范儿
爱范儿
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
博客园 - 【当耐特】
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
人人都是产品经理
人人都是产品经理
V
V2EX

博客园 - AnsonWu

[转载]Remoting随想 [转]Remoting之同步—异步调用 [转]正则表达式30分钟入门教程 准备写一个智能提示的控件,大家有什么好的思路 javascript函数库 推荐一个免费的数据库开发工具 从WEB SERVICE 中数据压缩策略(转) Asp.net Ajax 设计模式-原型模式 关于反射的一点理解(一) 设计模式--工厂方法 如何用SQLDMO在ASP.NET页面下实现数据库的备份与恢复 .NET开源项目介绍及资源推荐:数据持久层 在asp.net中如何从视频文件中抓取一桢并生成图像文件 使用AppUpdater组件(转) ASP.net的RUL重写 开发 Windows Mobile 应用程序 FAQ(转) Ajax for Java developers: Ajax with Direct Web Remoting 手机壁纸切割器源码发布
NHibernate初体验 <转>
AnsonWu · 2007-03-26 · via 博客园 - AnsonWu

最近研究NHibernate,找到这篇文章,A QuickStart Guide to NHibernate
原文讲解的很简单,以为事情也会很简单,于是乎跟着它step by step,结果却怎么也不出来!

于是我把NUnit和log4net的源代码一并都down了下来,加入解决方案,想逐行调试,看看究竟是错在哪里!恶梦从此开始......

对于这三个Open Source项目,虽早有耳闻(NUnit有在用),但却一直没有时间仔细研究它们的代码。这么莽撞地一头扎了进去,感觉自己像是进入了克诺萨斯迷宫——怎么都转不出来...

算了,重新开始!

0、创建数据库NHibernate和相应的表,如下:
CREATE DATABASE NHibernate
GO

USE NHibernate
CREATE TABLE Users(
  LogonID varchar(20) NOT NULL default '0',
  Name varchar(40) default NULL,
  Password varchar(20) default NULL,
  EmailAddress varchar(40) default NULL,
  LastLogon datetime default NULL,
  PRIMARY KEY  (LogonID)
)
GO

1、接着,用VS2003新建了个空白解决方案,名为NHibernateDemo。添加一个ClassLibrary,取默认名字ClassLibrary1。添加如下内容的User.cs文件:
using System;
namespace ClassLibrary1
{
 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; }
  }
  
 }
}


2、接着添加映射文件User.hbm.xml,内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
 <class name="ClassLibrary1.User, ClassLibrary1" table="users">
  <id name="Id" column="LogonId" type="String(20)">
  <generator class="assigned" />
  </id>
  <property name="UserName" column="Name" type="String(40)"/>
  <property name="Password" type="String(20)"/>
  <property name="EmailAddress" type="String(40)"/>
  <property name="LastLogon" type="DateTime"/>
 </class>
</hibernate-mapping>

在解决方案视图中右键单击这个文件,属性,设置它的“生成操作”为“内嵌资源”,这样它就会随类库一起被打包发布了。


3、对NHibernateDemo解决方案,添加一个ConsoleApplication,取默认名字ConsoleApplication1。在其Class1中的主函数内添加如下内容:
 Configuration cfg = new Configuration();
 cfg.AddAssembly("ClassLibrary1"); // ClassLibary1是类库项目生成的结果文件名
 
 ISessionFactory factory = cfg.BuildSessionFactory();
 ISession session = factory.OpenSession();
 ITransaction transaction = session.BeginTransaction();
 
 User newUser = new User();
 newUser.Id = "joe_cool";
 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();

并在文件开头添加一下几个名字空间:
using NHibernate; // for other NHibernate API
using NHibernate.Cfg; // for class Configuration
using ClassLibrary1; // for class User

当然,你得先为ConsoleApplication1项目添加如下引用:ClassLibrary1.dll, NHibernate.dll,才有可能编译通过。

4、接下来为ConsoleApplication1项目添加app.config文件,其内容如下:
 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
         <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.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;User ID=sa;Password=123abc;Min Pool Size=2"
  />
 </nhibernate>
</configuration>

如果使用的VS2003,则编译后IDE会自动将这个文件命名为“项目名字+exe.config”,并复制到输出目录下。如果不是,请自己动手拷贝app.config到输出目录,并如上述般命名之。


6、编译。运行。查看数据库结果。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=68241