0
我已经建立了我的数据库与流利NHibernate和SQL Server,它与SQL Server工作正常。每次我执行代码时,都会创建数据库结构并插入数据,从而导致应用程序界面完美运行。如果我关闭程序,数据库和内容将保持保存状态。流利NHibernate本地mdf文件不保留表结构
我不想在SQL服务器数据库中,我希望数据库是在解决方案文件结构的* .mdf文件。所以我可以复制应用程序而无需安装过程。
的问题,这个话题的原因,就是使用解决方案文件结构中的文件,应用程序的作品完美运行时,但是当我关闭应用程序的数据都没有了。如果我再次启动应用程序,我插入的数据就消失了。
我的类是SQL Server中的以下内容:
class NHibernateHelper
{
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
InitializeSessionFactory();
return _sessionFactory;
}
}
private static void InitializeSessionFactory()
{
_sessionFactory = Fluently.Configure()
.Database(
MsSqlConfiguration.MsSql2012
.ConnectionString(@"server=MyComputer;Database=MyDatabase;Trusted_Connection=true;")
.ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyEntity>())
.ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(true, true))
.BuildSessionFactory();
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
对于本地文件,我只是改变了的ConnectionString行:
.ConnectionString(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename="+AppDomain.CurrentDomain.BaseDirectory+ "General\\Data\\MyDatabase.mdf" + ";Integrated Security=True;")
要提交/持久化数据到数据库我使用以下结构:
using (var session = NHibernateHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var newEntity = new EntEntity
{
//Data to populate
};
session.SaveOrUpdate(newEntity);
transaction.Commit();
if (transaction.WasCommitted)
{
MessageAndCleanInterface("Sucessful created!");
}
}
}
有谁知道为什么会发生这种情况? 在这一刻,我不介意使用另一种类型的数据库类型的,我会开始进行与其他类型的测试。不过,我想知道这个的原因。
您是否使用交易为您插入? – Rabban
这一行'新SchemaUpdate工具(CFG).Execute(真,真)'的'SessionFactory'创建代码,你会每次你'创建SessionFactory'时间来得到一个干净的架构。你不需要每次都这样做? –
@Rabban我编辑了我的文章,以更好地回答你的问题。继续,是的,我在会话对象内部启动事务,并在最后进行提交。 – Nuno