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

推荐订阅源

D
Docker
F
Fortinet All Blogs
爱范儿
爱范儿
博客园 - Franky
MyScale Blog
MyScale Blog
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
B
Blog
P
Proofpoint News Feed
IT之家
IT之家
宝玉的分享
宝玉的分享
D
DataBreaches.Net
S
SegmentFault 最新的问题
Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
M
MIT News - Artificial intelligence
L
LangChain Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
雷峰网
雷峰网
Stack Overflow Blog
Stack Overflow Blog
量子位
V
V2EX
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

博客园 - 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