NHibernateUtil- Dao- Test
来源:互联网 发布:淘宝找不到换购 编辑:程序博客网 时间:2024/06/01 10:36
//============================================================
// Auto generated by CodeSmith, at: 2012/9/5 21:57:44
//============================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
using log4net;
using NHibernate.Context;
namespace BMW.Core.Dao {
public class NHibernateUtil {
/// <summary>
/// 全局唯一的SessionFactory
/// </summary>
public static readonly ISessionFactory SessionFactory;
//静态块,初始化读取 Hibernate 配置
static NHibernateUtil() {
try {
Configuration cfg = new Configuration();
SessionFactory = cfg.Configure().BuildSessionFactory();
}
catch (Exception ex) {
ILog logger = LogManager.GetLogger("NHibernateHelper Logger");
if (logger.IsErrorEnabled)
logger.Error("NHibernate initialization failed.Exception:{0}",ex);
throw;
}
}
/// <summary>
/// 绑定Session上下文管理,与current_session_context_class配置节相关,应在请求开始时执行
/// </summary>
public static void BindSession() {
ISession session = SessionFactory.OpenSession(); ;
CurrentSessionContext.Bind(session);
}
/// <summary>
/// 解除Session上下文管理绑定,释放Session对象。与current_session_context_class配置节相关,应在请求结束时执行。
/// </summary>
public static void UnbindSession() {
ISession session = CurrentSessionContext.Unbind(NHibernateUtil.SessionFactory);
session.Dispose();
}
/// <summary>
/// 获取当前上下文的Session
/// </summary>
public static ISession CurrentSession {
get {
return SessionFactory.GetCurrentSession();
}
}
/// <summary>
/// 在当前会话中开始事务Hibernate并返回事务对象,应用using释放
/// </summary>
public static ITransaction BeginTransaction() {
return CurrentSession.BeginTransaction();
}
}
}
//============================================================
// Auto generated by CodeSmith, at: 2012/9/5 21:57:44
//============================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
using System.Web;
using NHibernate.Context;
using log4net;
namespace BMW.Core.Dao {
public class NHibernateDao<T, TKey> {
public ISession Session {
get {
return NHibernateUtil.CurrentSession;
}
}
public T Insert(T entity) {
Session.Save(entity);
return entity;
}
public T Update(T entity) {
Session.Merge(entity);
return entity;
}
public void Delete(T entity) {
Session.Delete(entity);
}
public T FetchByKey(TKey key) {
return Session.Get<T>(key);
}
public IList<T> GetAll() {
return Session.CreateCriteria(typeof(T)).List<T>();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using BMW.Core.Dao;
using System.Transactions;
namespace BMW.Core.Test {
[TestFixture]
public class TestBase {
[TestFixtureSetUp]
public void TestFixtureSetUp() {
NHibernateUtil.BindSession();
}
[TestFixtureTearDown]
public void TestFixtureTearDown() {
NHibernateUtil.UnbindSession();
}
//TransactionScope tx = null;
//[SetUp]
//public void SetUp() {
// tx = new TransactionScope();
//}
//[TearDown]
//public void TearDown() {
// tx.Dispose();
//}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using BMW.Core.Biz;
using BMW.Core.Model;
namespace BMW.Core.Test
{
[TestFixture]
public class PositionBizTest:TestBase
{
private PositionBiz target = new PositionBiz();
[TestCase]
public void GetAllTest() {
Assert.AreEqual(5, target.GetAll().Count);
}
[TestCase]
public void FetchPositionByNameTest()
{
Assert.AreEqual(1, target.FetchPositionsByName("员工").Id);
}
[TestCase]
public void FetchByKeyTest() {
Assert.IsNotNull(target.FetchByKey(2));
}
[TestCase]
public void AddTest() {
Position p = new Position { Name = "员工" };
//输入重复职位名字,应抛出异常
Assert.Throws<BusinessException>(() => target.Add(p));
//不存在则添加
p = new Position { Name = "所长" };
target.Add(p);
Assert.AreEqual(6,target.GetAll().Count);
}
//产看当前职位ID是被外键使用,true为使用中,false未使用
[TestCase]
public void CheckPositionIsReferencedTest() {
Assert.IsTrue(target.CheckPositionIsReferenced(1));
Assert.IsFalse(target.CheckPositionIsReferenced(2));
}
[TestCase]
public void UpdateTest() {
//修改职位名称,如果修改的名称在表里面已经存在,则抛出异常
Position p = target.FetchByKey(4);
p.Name = "经理";
Assert.Throws<BusinessException>(() => target.Update(p));
//如果是唯一,则成功
p.Name = "班长";
target.Update(p);
Assert.AreEqual("班长", target.FetchByKey(4).Name);
}
[TestCase]
public void CheckPositionIsUsedTest() {
//如果职位被应用,返回true
Position p = new Position { Id = 1 };
Assert.IsTrue(target.CheckPositionIsUsed(p.Id));
p.Id = 2;
Assert.IsFalse(target.CheckPositionIsUsed(p.Id));
}
[TestCase]
public void DeleteByIdTest() {
//如果职位在员工表中有应用则抛出异常
Position p = target.FetchByKey(1);
Assert.Throws<BusinessException>(() => target.DeleteById(p.Id));
//删除成功之后,数据不存在返回null
target.DeleteById(3);
Assert.IsNull(target.FetchByKey(3));
}
}
}
- NHibernateUtil- Dao- Test
- DAO
- DAO
- DAO
- DAO
- DAO
- DAO
- DAO
- Dao
- dao
- dao
- dao
- DAO
- DAO
- DAO
- DAO
- DAO
- DAO
- 自省的 威力
- 删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个。
- 最短珠链
- 自省的威力(二)
- C++模板学习
- NHibernateUtil- Dao- Test
- 七夕恋歌
- 【Poco】学习例子的框架
- C++文件操作<5>
- 线程同步的总结
- Drupal 7 客制化主题原理
- 牛腩新闻发布系统——后台登录界面生成验证码
- eclipse-SDK-3.7-win32;eclipse-java-indigo-win32;eclipse-jee-indigo-win32 区别(ZZ)
- 七夕恋歌