使用NHibernate 注意要点

本文介绍了NHibernate在.NET应用程序中的配置方法,包括App.config文件的NHibernate配置段落、实体映射文件设置、实体类设计注意事项及事务管理等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 应用层的工程的App.config也要有NHibernate相关的配置。
None.gif<?xml version="1.0" encoding="utf-8" ?>
None.gif
<configuration>
None.gif  
<configSections>
None.gif    
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System,Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
None.gif  
</configSections>
None.gif  
<nhibernate>
None.gif    
<add         key="hibernate.connection.provider"       value="NHibernate.Connection.DriverConnectionProvider" 
None.gif        
/>
None.gif    
<add 
None.gif
key="hibernate.dialect"                      
None.gifvalue
="NHibernate.Dialect.MsSql2000Dialect" 
None.gif        
/>
None.gif    
<add key="hibernate.show_sql" value="false"/>
None.gif    
<add 
None.gif    
key="hibernate.connection.driver_class"        value="NHibernate.Driver.SqlClientDriver" 
None.gif        
/>
None.gif    
<add 
None.gif            
key="hibernate.connection.connection_string"         value="Server=.\SQLEXPRESS;Initial Catalog=DatabaseName;Integrated Security=SSPI" 
None.gif        
/>
None.gif  
</nhibernate>
None.gif
</configuration>

2. 数据库设计当中,表名,字段名不能有数据库的关键字,如:user, group.....字段名最好不与表名相同

3.实体映射文件(*.hbm.xml)要设置为Embeded Resource(嵌入式资源)文件。
4.对于one-to-many, 配置要用set, 实体类要用Iesi.Collections.ISet。
例如:
Role.hbm.xml
None.gif<?xml version="1.0" encoding="utf-8" ?>
None.gif
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
None.gif  
<class name="Common.Entity.Role,Common" table="Role">
None.gif    
<id name="RoleKey" type="Int32">
None.gif      
<generator class="assigned" />
None.gif    
</id>
None.gif    
<property name="RoleName" type="String"/>
None.gif    
<set name="UserMembers" inverse="true" cascade="all">
None.gif      
<key column="RoleKey"/>
None.gif      
<one-to-many class="Common.Entity.User,Common"/>
None.gif    
</set>
None.gif  
</class>
None.gif
</hibernate-mapping>
Role.cs
None.gif public class Role
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        
private int roleKey;
InBlock.gif
InBlock.gif        
private string roleName;
InBlock.gif
InBlock.gif        
private ISet userMembers;
InBlock.gif
InBlock.gif        
public string RoleName
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return roleName;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                roleName 
= value;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public int RoleKey
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return roleKey;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                roleKey 
= value;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public ISet UserMembers
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
if (userMembers == null)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    userMembers 
= new HashedSet();
ExpandedSubBlockEnd.gif                }

InBlock.gif                
return userMembers;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                userMembers 
= value;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

5.实体类一定要override Equals方法与GetHashcode方法。

6.对数据进行插入、修改、删除要使用事务:
ITransaction tran=session.BegionTransaction();
//Do something
tran.Commit();

转载于:https://www.cnblogs.com/vivid-stanley/archive/2007/02/11/647382.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值