其实,以下说的问题不是什么大事,只是自己在学习NHibernate时候遇到的问题,说出来让大家注意以下,都是一些细小的地方,但是这些地方不注意也不行。。。
一、实体的xml 文件区分大小写:
如实体类xml 文件中如果定义属性为UserID,那么在实体类的Cs文件中你也要定义属性UserID,大小写要一致,
不一致就会报错!
1<?xml version="1.0" encoding="utf-8" ?>
2<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
3 <class name="GoodFoodHelper.dinner, GoodFoodHelper" table="users">
4 <id name="DinnerId" type="Int32">
5 <generator class="identity" />
6 </id>
7 <property name="UserID" type="Int32"/>
8 <property name="PlaceID" type="Int16"/>
9 <property name="Price" type="Single"/>
10 <property name="OrderTime" type="DateTime"/>
11 <property name="Status" type="Int16"/>
12 <property name="PMID" type="Int32"/>
13 <property name="DinnerDesc" type="String"/>
14
15
16 </class>
17</hibernate-mapping>
18
2<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
3 <class name="GoodFoodHelper.dinner, GoodFoodHelper" table="users">
4 <id name="DinnerId" type="Int32">
5 <generator class="identity" />
6 </id>
7 <property name="UserID" type="Int32"/>
8 <property name="PlaceID" type="Int16"/>
9 <property name="Price" type="Single"/>
10 <property name="OrderTime" type="DateTime"/>
11 <property name="Status" type="Int16"/>
12 <property name="PMID" type="Int32"/>
13 <property name="DinnerDesc" type="String"/>
14
15
16 </class>
17</hibernate-mapping>
18
1 public int UserID
2 {
3 get { return m_UserId; }
4 set { m_UserId = value; }
5 }
2 {
3 get { return m_UserId; }
4 set { m_UserId = value; }
5 }
二、实体类中的数据类型要用C#中数据类型
如 hbm.xml文件中
<property name="GroupID" type="Int16"/>
不能写成
<property name="GroupID" type="SmallInt"/>
三、最好把公共配置的东西写在web.config中,否则你在类文件修改配置文件时,还需在复制此文件到WEb
工程的bin目录下面。
我开始把下面东西放入一个叫hibernate.cfg.xml的文件中去,可是后来修改了配置不起作用,后来发现
Web工程下面也有一份,把类库中修改好的配置文件覆盖过去就可以了!
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.0">
<session-factory name="GoodFoodHelper">
<!-- 属性 -->
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">server=.;database=BaiheDinner;uid=sa;pwd=sa;</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>
<!-- 映射文件 -->
<mapping assembly="GoodFoodHelper" />
</session-factory>
</hibernate-configuration>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.0">
<session-factory name="GoodFoodHelper">
<!-- 属性 -->
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">server=.;database=BaiheDinner;uid=sa;pwd=sa;</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>
<!-- 映射文件 -->
<mapping assembly="GoodFoodHelper" />
</session-factory>
</hibernate-configuration>
四 、有个问题请教:
我看了 DDL 的 NHibernateWebDemo 一例 ,里面是用3层架构写的
业务层、实体层、和表示层 非常清晰、我想问如果我想把业务层和实体层合为一个可以吗?
然后我把实体类中写所有表示层需要的方法
例如 我把获得所有用户对象集合的方法,也写到力实体类 users中了,不知道这样写有什么缺点
1public IList GetAllUsers(string strHQL)
2 {
3 IList lst;
4 ISession session = SessionFactory.OpenSession();
5 ITransaction transaction = session.BeginTransaction();
6
7 lst=session.Find(strHQL);
8 transaction.Commit();
9 session.Close();
10 return lst;
11 }
2 {
3 IList lst;
4 ISession session = SessionFactory.OpenSession();
5 ITransaction transaction = session.BeginTransaction();
6
7 lst=session.Find(strHQL);
8 transaction.Commit();
9 session.Close();
10 return lst;
11 }