2017-10-19 13 views
0

Fluent NHibernateとSQL Serverでデータベースをセットアップしました。SQL Serverで正常に動作していました。コードを実行するたびに、データベース構造が作成され、データが挿入されてアプリケーション・インターフェースが完全に機能していた。プログラムを終了すると、データベースとコンテンツは保存されたままになります。流暢NHibernateローカルmdfファイルはテーブル構造を保持しません

私はデータベースをSQLサーバーに入れたくないので、データベースをソリューションファイル構造の* .mdfファイルにします。だから私はインストールプロセスなしでアプリケーションをコピーすることができます。

問題とこのトピックの理由は、ソリューションファイル構造のファイルを使用すると、アプリケーションは実行中に完全に動作しますが、アプリケーションを閉じるとデータはすべて消えてしまいます。私がアプリケーションを再起動すると、私が挿入したデータはなくなります。

私のクラスは、SQL Serverの次のようである:

.ConnectionString(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename="+AppDomain.CurrentDomain.BaseDirectory+ "General\\Data\\MyDatabase.mdf" + ";Integrated Security=True;") 

が/コミットデータベースにデータを永続化するには:ローカルファイルについては

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行を変更します私は次の構造を使用します:

 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

'SessionFactory'作成コードの' new SchemaUpdate(cfg).Execute(true、true) '行では、' SessionFactory'が作成されるたびにきれいなスキーマを取得します。毎回これを行う必要はありませんか? –

+0

@Rabban私は自分の投稿を編集してより良い質問に答えました。再開すると、セッションオブジェクト内でトランザクションを開始し、最後にコミットします。 – Nuno

答えて

1

Visual Studioはすべてのビルドで.mdfを上書きします。新しいファイルを作成せずに.exeファイルのみを起動すると、データは永続化されます。

関連する問題