Hi,
I would like to write a common utility for saving domain object to database show as below, but when I use nunit to test it, the result is fail, I don't know where I got wrong, dose anyone can help me?
Thanks.
Code:
namespace NHibernateUtility
{
public class NHibernateDao<T, IdT> : IDao<T, IdT>
{
private ISessionFactory m_factory;
private ISession m_session;
private NHibernate.ITransaction m_transaction;
public NHibernateDao(ISessionFactory factory)
{
m_factory = factory;
}
public NHibernateDao(ISession session, NHibernate.ITransaction transaction)
{
m_session = session;
m_transaction = transaction;
}
private void Open()
{
if (m_session == null)
{
if (m_factory == null) throw new NullReferenceException("Factory cannot be empty.");
m_session = m_factory.OpenSession();
}
}
private void Close()
{
if (m_transaction == null)
{
m_session.Close();
m_session = null;
}
}
public System.Collections.IList GetAll()
{
Open();
ICriteria criteria = m_session.CreateCriteria(typeof(T));
Close();
return criteria.List<T>() as List<T>;
}
public Object GetById(Object id)
{
return LoadById((IdT)id);
}
public T GetById(IdT id)
{
return LoadById(id);
}
private T LoadById(IdT id)
{
Open();
T t = (T)m_session.Get(typeof(T), id);
Close();
return t;
}
public bool IsExist(T entity)
{
return GetById((IdT)((object)entity.ToString())) != null;
}
public IdT Save(T entity)
{
Open();
IdT id = (IdT) m_session.Save(entity);
Close();
return id;
}
public void Update(T entity)
{
Open();
m_session.Update(entity);
Close();
}
public void Delete(T entity)
{
Open();
m_session.Delete(entity);
Close();
}
}
}
Test Case
Code:
[Test]
public void SaveTest()
{
Cat cat = new Cat();
cat.Id = "C001";
cat.Name = "Tim Tim";
cat.Sex = 'M';
cat.Weight = 1.1f;
NHibernateDao<Cat, string> dao = new NHibernateDao<Cat, string>(m_factory);
string catId = dao.Save(cat);
Assert.AreEqual(catId, cat.Id);
Cat cat2 = dao.GetById("C001");
Assert.IsNotNull(cat2);
Assert.AreEqual(cat.Name, cat2.Name);
}
[Test]
public void UpdateTest()
{
Cat cat1;
NHibernateDao<Cat, string> dao = new NHibernateDao<Cat, string>(m_factory);
cat1 = dao.GetById("CAT001");
Assert.IsNotNull(cat1);
cat1.Name = "Tim Tim";
dao.Update(cat1);
Cat cat2;
cat2 = dao.GetById("CAT001");
Assert.IsNotNull(cat2);
Assert.AreEqual(cat1.Id, cat2.Id);
Assert.AreEqual(cat1.Name, cat2.Name);
Assert.AreEqual(cat1.Sex, cat2.Sex);
Assert.AreEqual(cat1.Weight, cat2.Weight);
}