折腾了一天,NHibernate1.2在VS2005下的配置,终于通了,做个简单的备忘吧,以防以后再走弯路。

1、首先,我使用的是单独的配置文件hibernate.cfg.xml,我觉得这样更合理些,比较把那些配置都放在Web.config里更合理点吧,文件内容是这样的:

<?xml version="1.0" encoding="utf-8" ?>
<!--普通配置文件,使用程序集加载映射文件-->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.0">
  <session-factory name="NHData">
    <!-- 属性 -->
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">server=.;database=user;uid=sa;pwd=5678;</property>
    <property name="show_sql">false</property>
    <property name="dialect">NHibernate.Dialect.MsSql2000Dialect</property>
    <property name="use_outer_join">true</property>
    <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
    <!-- 映射文件 -->
    <!--程序将加载NHTest命名空间所有的映射文件(*.hbm.xml)-->
    <mapping assembly="NHData" />
  </session-factory>
</hibernate-configuration>

2、接下来是类文件和XML映射文件,我新建了一个类库项目NHData,在这里放了一个User.cs和User.hbm.xml,注意这个XML的扩展名呀,我一开始就弄个User.xml,当然不对了,

User.cs:
public class User
    {
        public User()
        {}
        private int m_Id;

        public int Id
        {
            get { return m_Id; }
            set { m_Id = value; }
        }
        private string m_UserName;

        public string UserName
        {
            get { return m_UserName; }
            set { m_UserName = value; }
        }
        private string m_Password;

        public string Password
        {
            get { return m_Password; }
            set { m_Password = value; }
        }
        private string m_Email;

        public string Email
        {
            get { return m_Email; }
            set { m_Email = value; }
        }
    }
User.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" default-lazy="false">
  <class name="NHData.User,NHData" table="users">
    <id name="Id" type="Int32">
      <generator class="identity" />
    </id>
    <property name="UserName" type="String"/>
    <property name="Password" type="String"/>
    <property name="Email" type="String"/>
  </class>
</hibernate-mapping>

这个XML的内容得好好说说,在这耽误了太多时间了,

首先,在这个版本的配置下(NHibernate1.2 VS vs2005),要加 default-lazy="false"这个个东东;

另外,注意这一行
<class name="NHData.User,NHData" table="users">
中的name,逗号前面表示的是XXX类,后面表示的是程序集的名字,问题是这样出来的,我在NHData下又建了一个文件夹Data,原想是专用于放置这个类文件和映射文件的,所以就把这一行写成了
<class name="NHData.Data.User,NHData.Data" table="users">,看看,好像没错呀,就为这个,找了一个多小时,最后,改成了这样
<class name="NHData.Data.User,NHData" table="users">
才好了,为什么,为什么前面用指明Data后面不用,后来才明白呀,前面,表示的是User类,完整的引用当然是NHData.Data.User了,而后面呢,表示的是程序集的名字,注意,是“程序集”,其实在建了NHData这个项目后,它下面的所有类,程序集就都是NHData了,所以,后面只能是NHData,不能是NHData了

最后,还要注意,这个XML文件要把属性设置成“嵌入的资源”。

3、看一下调用的方法

Configuration cfg = new Configuration().Configure();
            ISessionFactory factory = cfg.BuildSessionFactory();
            ISession session = factory.OpenSession();

            User user;
            try
            {
                user = session.Load(typeof(User), id) as User;
            }

4、注意了,我把hibernate.cfg.xml放在网站的根目录下了,别忘了,这是XML文件,用户是可以直接下载的,要是哪天真给我下了去,那database=user;uid=sa;pwd=5678。。。。全完了!!,所以,把它改个名字hibernate.config,这样就保险了,但这句话要改一下
Configuration cfg = new Configuration().Configure();
要改成
Configuration cfg = new Configuration().Configure("文件绝对地址(Server.Mappath......)");

这里只是一个简单的总结,其实都是从DDL上学来的,呵呵,详细的去那里看吧

http://www.cnblogs.com/renrenqq/category/39891.html

posted on 2007-01-24 11:13  HenryZhang  阅读(1643)  评论(6编辑  收藏  举报