Fluent NHibernate 本地 mdf 文件不保持 table 结构
Fluent NHibernate local mdf file doesn't keep table structure
我已经使用 Fluent NHibernate 和 SQL 服务器设置了我的数据库,它在 SQL 服务器。每次我执行代码时,都会创建数据库结构并插入数据,应用程序界面运行良好。如果我关闭程序,数据库和内容将保留。
我不想要SQL服务器中的数据库,我希望数据库是解决方案文件结构中的一个*.mdf文件。所以我可以直接复制应用程序而无需安装过程。
问题和这个主题的原因是,使用解决方案文件结构中的文件,应用程序在 运行 时运行完美,但当我关闭应用程序时,数据都消失了。如果我再次启动该应用程序,我插入的数据将消失。
我的 class 是 SQL 服务器的以下内容:
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;")
要commit/persist数据到数据库我用的结构如下:
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!");
}
}
}
有谁知道为什么会这样?
此刻,我不介意使用其他类型的数据库类型,我将开始使用其他类型进行测试。
不过,我想知道这是为什么。
Visual Studio 每次构建都会覆盖您的 .mdf。如果你只启动你的 .exe 文件而不构建新的,你的数据应该被保留。
我已经使用 Fluent NHibernate 和 SQL 服务器设置了我的数据库,它在 SQL 服务器。每次我执行代码时,都会创建数据库结构并插入数据,应用程序界面运行良好。如果我关闭程序,数据库和内容将保留。
我不想要SQL服务器中的数据库,我希望数据库是解决方案文件结构中的一个*.mdf文件。所以我可以直接复制应用程序而无需安装过程。
问题和这个主题的原因是,使用解决方案文件结构中的文件,应用程序在 运行 时运行完美,但当我关闭应用程序时,数据都消失了。如果我再次启动该应用程序,我插入的数据将消失。
我的 class 是 SQL 服务器的以下内容:
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;")
要commit/persist数据到数据库我用的结构如下:
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!");
}
}
}
有谁知道为什么会这样? 此刻,我不介意使用其他类型的数据库类型,我将开始使用其他类型进行测试。 不过,我想知道这是为什么。
Visual Studio 每次构建都会覆盖您的 .mdf。如果你只启动你的 .exe 文件而不构建新的,你的数据应该被保留。