2017-10-19 300 views
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!"); 
       } 
      } 
     } 

有谁知道为什么会发生这种情况? 在这一刻,我不介意使用另一种类型的数据库类型的,我会开始进行与其他类型的测试。不过,我想知道这个的原因。

+0

您是否使用交易为您插入? – Rabban

+0

这一行'新SchemaUpdate工具(CFG).Execute(真,真)'的'SessionFactory'创建代码,你会每次你'创建SessionFactory'时间来得到一个干净的架构。你不需要每次都这样做? –

+0

@Rabban我编辑了我的文章,以更好地回答你的问题。继续,是的,我在会话对象内部启动事务,并在最后进行提交。 – Nuno

回答

1

的Visual Studio将覆盖密度纤维板,每次构建。如果只启动您的.exe文件而不构建新文件,则应该保留您的数据。