NHibernate 做个小项目来试一下吧 二
完成了实体层 就该写中间层了,看了哪几篇文章后,对他们用的哪个EntityConrol感到非常好用,我也就几乎是照抄了一个,呵呵,拿来主意 吗,
添加一个 新建工程 guestbook.Dal
我把Sessionfactory 和 EntityControl分成了两个文件其主要代码为
using System;
using System.Reflection;
using System.Data;
using System.Data.SqlClient;

using NHibernate;
using NHibernate.Cfg;
using NHibernate.Dialect;
using NHibernate.Tool.hbm2ddl;

using guestbook.data;
namespace guestbook.Dal
{
/// <summary>
/// SessionFactory 的摘要说明。
/// </summary>
public class SessionFactory
{
private static ISessionFactory sessions;
private static Configuration cfg;
private static Dialect dialect;

public SessionFactory()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

public static ISession OpenSession()
{
if(sessions==null)
{
BuildSessionFactory();
}
return sessions.OpenSession();
}

private static void BuildSessionFactory()
{
ExportSchema(new string[]{
"users.hbm.xml",
"guestbook.hbm.xml"
},true);
}

private static void ExportSchema(string[] files,bool exportschema)
{
cfg=new Configuration();
for(int i=0;i<files.Length;i++)
{
cfg.AddResource("guestbook.data.hbm."+files[i],Assembly.Load("guestbook.data"));
}

dialect=Dialect.GetDialect();
if(exportschema) new SchemaExport(cfg).Create(true,true);

sessions=cfg.BuildSessionFactory();
}

}
}

using System;

using NHibernate;
using guestbook.data;

namespace guestbook.Dal
{
/// <summary>
/// EntityContorl 的摘要说明。
/// </summary>
public class EntityControl
{
private static EntityControl entity;

public static EntityControl CreateEntityControl()
{
if(entity==null)
{
entity=new EntityControl();
}
return entity;
}
public void addEntity(Object entity)
{
ISession s=SessionFactory.OpenSession();
ITransaction t=s.BeginTransaction();
try
{
s.Save(entity);
t.Commit();
}
catch(Exception e)
{
t.Rollback();
throw e;
}
finally
{
s.Close();
}
}
public void updateEntity(Object entity,Object key)
{
ISession s=SessionFactory.OpenSession();
ITransaction t=s.BeginTransaction();
try
{
s.Update(entity,key);
t.Commit();
}
catch(Exception e)
{
t.Rollback();
throw e;
}
finally
{
s.Close();
}
}
public void DelEntity(object entity)
{
ISession s=SessionFactory.OpenSession();
ITransaction t=s.BeginTransaction();
try
{
s.Delete(entity);
t.Commit();
}
catch(Exception e)
{
t.Rollback();
throw e;
}
finally
{
s.Close();
}
}
}
}
其中代码的意思 我就不说了,我在文章开头提供的两位仁兄的文章里已经说明的很清楚了,我只是借签过吗 ,其中我的EntityControl还没有完成,只是先提供了一插入、更新、删除的功能,
写一个应用类试试
using System;

using NHibernate;
using guestbook.data;

namespace guestbook.Dal
{
/// <summary>
/// usersdal 的摘要说明。
/// </summary>
public class usersdal
{
private EntityControl control;
public usersdal()
{
control=EntityControl.CreateEntityControl();
}
public void addUser(users user)
{
control.addEntity(user);
}
public void updateUser(users user,int Id)
{
control.updateEntity(user,user.id);
}
public void DelUser(users user)
{
control.DelEntity(user);
}


}
}

在写个测试文件
using System;

using System.Collections;
using NHibernate;
using NHibernate.Cfg;

using NUnit.Framework;

using guestbook.data;
using guestbook.Dal;
namespace guestbook.test.daltest
{
/// <summary>
/// user 的摘要说明。
/// </summary>
[TestFixture]
public class user
{
public user()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
[Test]public void AddDalUser()
{
users newUser=new users();
newUser.Name="Pb";
newUser.email="cctv5cn@gmail.com";
newUser.password="147852";
newUser.flag=1;
newUser.regtime=DateTime.Now;

usersdal ud=new usersdal();
ud.addUser(newUser);
}
}
}
天啊 ,失败了,
,提示错误,
guestbook.test.daltest.user.AddDalUser : NHibernate.MappingException :
Resource: guestbook.guestbook.data.hbm.users.hbm.xml not found这是怎么 回事 ,我的目录结构应该没有问题啊 ,

这也是我提前写这篇文章的原因,大侠们 救命 啊,

添加一个 新建工程 guestbook.Dal
我把Sessionfactory 和 EntityControl分成了两个文件其主要代码为




















































































































































写一个应用类试试





































在写个测试文件







































天啊 ,失败了,




这也是我提前写这篇文章的原因,大侠们 救命 啊,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构