问题描述
我有一个使用FluentNHibernate的包装DLL。我正在使用Windows应用程序中的DLL。我可以从数据库中加载内容,并且一切都可以按照我的期望进行。
我认为我可以使用包装DLL进行一些单元测试。我在单元测试中使用了相同的包装DLL。但是,当它尝试打开会话时,将清除数据库的内容(但不会引发异常,当我尝试将Query与会话一起使用时会引发异常)。看起来有些东西没有正确初始化,但是找不到。有帮助或指示吗?
//包装DLL中的方法
public void LoadData(int id)
{
using (var session = NHibernateHelper.OpenSession())
{
using (var tx = session.BeginTransaction())
{
try
{
var customer = session.Query<MyDataBaseObject>()
.Where(c => c.Id == id).First();
tx.Commit();
}
catch (Exception ex)
{
}
...
以及单元测试中的代码
[TestClass]
public class UnitTest1
{
Class1 class1 = new Class1();
[TestMethod]
public void TestMethod1()
{
class1.LoadData(1);
}
}
编辑:2020年10月18日
看起来问题出在InitializeSessionFactory中。因此,应以这种方式进行映射,以使其不会每次都创建所有对象。例如,我添加了一个对象,稍后再返回,我应该能够添加一个新的对象(而不删除现有数据)。它一直在为数据库创建新对象。如果我立即读取数据,则工作正常,因为我已有会话。 有人可以指出如何修改以下代码来实现这一目标吗?
公共类NHibernateHelper { 私有静态ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
InitializeSessionFactory();
return _sessionFactory;
}
}
private static void InitializeSessionFactory()
{
_sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql7.ConnectionString(@"Server=(local);initial catalog=MyDatabase; user=my_user_id;password=my_password;").ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Store>())
.ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true,true))
.BuildSessionFactory();
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)