完成了实体层 就该写中间层了,看了哪几篇文章后,对他们用的哪个EntityConrol感到非常好用,我也就几乎是照抄了一个,呵呵,拿来主意 吗,
![](/Emoticons/red_smile.gif)
添加一个 新建工程 guestbook.Dal
我把Sessionfactory 和 EntityControl分成了两个文件其主要代码为
using System;
using System.Reflection;
using System.Data;
using System.Data.SqlClient;
![](/Images/OutliningIndicators/None.gif)
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Dialect;
using NHibernate.Tool.hbm2ddl;
![](/Images/OutliningIndicators/None.gif)
using guestbook.data;
namespace guestbook.Dal
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// SessionFactory 的摘要说明。
/// </summary>
public class SessionFactory
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
private static ISessionFactory sessions;
private static Configuration cfg;
private static Dialect dialect;
![](/Images/OutliningIndicators/InBlock.gif)
public SessionFactory()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//
// TODO: 在此处添加构造函数逻辑
//
}
![](/Images/OutliningIndicators/InBlock.gif)
public static ISession OpenSession()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(sessions==null)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
BuildSessionFactory();
}
return sessions.OpenSession();
}
![](/Images/OutliningIndicators/InBlock.gif)
private static void BuildSessionFactory()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
ExportSchema(new string[]
{
"users.hbm.xml",
"guestbook.hbm.xml"
},true);
}
![](/Images/OutliningIndicators/InBlock.gif)
private static void ExportSchema(string[] files,bool exportschema)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
cfg=new Configuration();
for(int i=0;i<files.Length;i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
cfg.AddResource("guestbook.data.hbm."+files[i],Assembly.Load("guestbook.data"));
}
![](/Images/OutliningIndicators/InBlock.gif)
dialect=Dialect.GetDialect();
if(exportschema) new SchemaExport(cfg).Create(true,true);
![](/Images/OutliningIndicators/InBlock.gif)
sessions=cfg.BuildSessionFactory();
}
![](/Images/OutliningIndicators/InBlock.gif)
}
}
![](/Images/OutliningIndicators/None.gif)
using System;
![](/Images/OutliningIndicators/None.gif)
using NHibernate;
using guestbook.data;
![](/Images/OutliningIndicators/None.gif)
namespace guestbook.Dal
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// EntityContorl 的摘要说明。
/// </summary>
public class EntityControl
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
private static EntityControl entity;
![](/Images/OutliningIndicators/InBlock.gif)
public static EntityControl CreateEntityControl()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(entity==null)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
entity=new EntityControl();
}
return entity;
}
public void addEntity(Object entity)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
ISession s=SessionFactory.OpenSession();
ITransaction t=s.BeginTransaction();
try
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
s.Save(entity);
t.Commit();
}
catch(Exception e)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
t.Rollback();
throw e;
}
finally
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
s.Close();
}
}
public void updateEntity(Object entity,Object key)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
ISession s=SessionFactory.OpenSession();
ITransaction t=s.BeginTransaction();
try
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
s.Update(entity,key);
t.Commit();
}
catch(Exception e)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
t.Rollback();
throw e;
}
finally
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
s.Close();
}
}
public void DelEntity(object entity)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
ISession s=SessionFactory.OpenSession();
ITransaction t=s.BeginTransaction();
try
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
s.Delete(entity);
t.Commit();
}
catch(Exception e)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
t.Rollback();
throw e;
}
finally
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
s.Close();
}
}
}
}
![](/Images/OutliningIndicators/None.gif)
其中代码的意思 我就不说了,我在文章开头提供的两位仁兄的文章里已经说明的很清楚了,我只是借签过吗 ,其中我的EntityControl还没有完成,只是先提供了一插入、更新、删除的功能,
写一个应用类试试
using System;
![](/Images/OutliningIndicators/None.gif)
using NHibernate;
using guestbook.data;
![](/Images/OutliningIndicators/None.gif)
namespace guestbook.Dal
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// usersdal 的摘要说明。
/// </summary>
public class usersdal
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
private EntityControl control;
public usersdal()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
control=EntityControl.CreateEntityControl();
}
public void addUser(users user)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
control.addEntity(user);
}
public void updateUser(users user,int Id)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
control.updateEntity(user,user.id);
}
public void DelUser(users user)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
control.DelEntity(user);
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
}
}
![](/Images/OutliningIndicators/None.gif)
在写个测试文件
using System;
![](/Images/OutliningIndicators/None.gif)
using System.Collections;
using NHibernate;
using NHibernate.Cfg;
![](/Images/OutliningIndicators/None.gif)
using NUnit.Framework;
![](/Images/OutliningIndicators/None.gif)
using guestbook.data;
using guestbook.Dal;
namespace guestbook.test.daltest
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// user 的摘要说明。
/// </summary>
[TestFixture]
public class user
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
public user()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//
// TODO: 在此处添加构造函数逻辑
//
}
[Test]public void AddDalUser()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
users newUser=new users();
newUser.Name="Pb";
newUser.email="cctv5cn@gmail.com";
newUser.password="147852";
newUser.flag=1;
newUser.regtime=DateTime.Now;
![](/Images/OutliningIndicators/InBlock.gif)
usersdal ud=new usersdal();
ud.addUser(newUser);
}
}
} 天啊 ,失败了,
![](/Emoticons/angry_smile.gif)
,提示错误,
guestbook.test.daltest.user.AddDalUser : NHibernate.MappingException :
Resource: guestbook.guestbook.data.hbm.users.hbm.xml not found 这是怎么 回事 ,我的目录结构应该没有问题啊 ,
![](/images/cnblogs_com/9527/Capture_3.jpg)
这也是我提前写这篇文章的原因,大侠们 救命 啊,