我已经使用 Fluent NHibernate 和SQL Server设置了我的数据库,并且它与 SQL Server 一起运行良好。每次我执行代码时,都会创建数据库结构并插入数据,使应用程序界面完美运行。如果我关闭程序,数据库和内容将保存。
我不希望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!");
}
}
}
有谁知道为什么会这样? 此时,我不介意使用其他类型的数据库类型,我将开始用其他类型进行测试。 不过,我想知道原因。
答案 0 :(得分:1)
Visual Studio会在每次构建时覆盖.mdf。如果您只启动.exe文件而不构建新文件,则应保留您的数据。