3

Fluent NHibernate を使用してデータベースを操作しています。

次のコードを実行すると、いくつかのことが機能します。1 つの関数がテーブル構造を更新しますが、これも機能しますが、データが失われています。

ISessionFactory result = Fluently.Configure()
    .Database(MySQLConfiguration.Standard.ConnectionString(connectionString))
    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Page>())
    .ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true))
    .BuildSessionFactory();

これを解決する方法を知っている人はいますか?テーブルは更新する必要がありますが、データを削除してはなりません。

流暢な NH の wiki で、 に関する詳細情報を見つけることができませんExposeConfiguration

4

1 に答える 1

16

SchemaExport(cfg).Create(true, true))していることです。私は Fluent を使用していませんが、私が見たプロジェクトの 1 つに基づいて、次のようなものにする必要があると思いますSchemaUpdate(cfg).Execute(true,true)

編集:この回答はまだ人々を助けているように見えるので、ここに長い説明があります.

ここでの主な違いは、作成するオブジェクトです。インスタンスは、データベースを作成するためのSchemaExportDDL を生成します。メソッドはCreateスクリプトを生成し、2 番目のパラメーターは、データベースに対してそのスクリプトを実行するかどうかを指定します。 Createを呼び出しExecute、追加のパラメーターを渡します。これには、「テーブルを削除するだけでなく、削除して再作成する」というものも含まれます。このクラスには、最初にテーブルを削除しないというオプションはありません。

インスタンスは、既存のSchemaUpdateテーブルを調べて、現在のテーブルと構成で指定されたテーブルとの間のデルタを生成するため、(内部的に) はるかに複雑な獣です (これに関する参照が見つかりません。コードで、私はそれが機能することを知っています)。ただし、どちらの場合も、パラメーターは基本的に同じです。1つ目は「ddlをコンソールに出力する」で、2つ目は「データベースに対して実際に実行する」です。

于 2012-04-19T19:43:25.547 に答える