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!");
}
}
}
誰がなぜこれが起こるのか知っていますか? この時点では、別の種類のデータベースを使用しても構わないので、他の種類のテストを開始します。 それにもかかわらず、私はこの理由を知りたいと思います。
あなたのインサートにトランザクションを使用しましたか? – Rabban
'SessionFactory'作成コードの' new SchemaUpdate(cfg).Execute(true、true) '行では、' SessionFactory'が作成されるたびにきれいなスキーマを取得します。毎回これを行う必要はありませんか? –
@Rabban私は自分の投稿を編集してより良い質問に答えました。再開すると、セッションオブジェクト内でトランザクションを開始し、最後にコミットします。 – Nuno