【发布时间】:2014-08-16 09:58:41
【问题描述】:
几天来,我一直在尝试将 NHibernate 与 MySQL 连接起来。我正在使用存储库模式,它可以很好地从数据库中获取数据。但是,我无法保存数据。代码没有返回错误,但数据没有插入到数据库中。这一切似乎都相当简单,并且确实返回了数据。我只是不知道如何调试当我执行 Nhibernate SaveOrUpdate 方法时它没有返回任何错误,但没有保存任何东西。
这是使用 Repository 保存 Person 对象的代码;
[Test]
public void Given_New_User_When_Saved_User_Can_Be_Detected()
{
Person testPerson = new Person("George", "Candle");
IRepository repository = new RepositoryBase();
repository.Save(testPerson);
List<Person> personList = repository.ToList<Person>();
Assert.IsTrue(personList.Exists(x => x.FirstName == "George"));
}
这里是 RepositoryBase 代码:
公共类 RepositoryBase: IRepository, IDisposable
{
protected ISession _session = null;
protected ITransaction _transaction = null;
public RepositoryBase()
{
_session = Database.OpenSession();
}
public RepositoryBase(ISession session)
{
_session = session;
}
//Transaction and Session Management Methods
public void BeginTransaction()
{
_transaction = _session.BeginTransaction();
}
public void CommitTransaction()
{
_transaction.Commit();
CloseTransaction();
}
public void RollbackTransaction()
{
_transaction.Rollback();
CloseTransaction();
CloseSession();
}
private void CloseSession()
{
_session.Close();
_session.Dispose();
_session.Flush();
_session = null;
}
private void CloseTransaction()
{
_transaction.Dispose();
_transaction = null;
}
//IRepository members
public virtual void Save(object obj)
{
_session.SaveOrUpdate(obj);
}
}
这是数据库类
公共静态类数据库 { 私有静态 ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
string connString = "server=172.16.20.38;Port=3306;userid=root;database=KanbanDevelopment;password=;Persist Security Info=True;";
_sessionFactory = Fluently.Configure()
.Database(MySQLConfiguration.Standard
.ConnectionString(connString))
// .ExposeConfiguration(cfg => new SchemaExport(cfg).Execute(true, true, false))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Person>())
.BuildSessionFactory();
}
return _sessionFactory;
}
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
【问题讨论】:
-
你有没有试过调用 BeginTransaction,保存后尝试调用 session.Flush()
标签: c# mysql nhibernate fluent-nhibernate