1

私は一連の Fluent NHibernate マッピングを継承しました。これらは現在、それらが含まれているプロジェクトで動作します (つまり、アプリケーションはそれらを使用して動作します)。現在、いくつかの新しいマッピングの統合テストを構築しようとしているため、古いものと新しいもののすべてを使用してスキーマを生成します。

new SchemaExport(Container.Resolve<Configuration>()).Create(true, true);

ただし、実行される SQL 生成スクリプトには無効なコードが含まれています。問題のほとんどは、次の 2 つのケースのいずれかのような行に起因しているようです。

// x.Map is string
Map(x => x.Map).Column("Karta").Not.Nullable().Default("False");
// x.Active is bool
Map(x => x.Active).Column("Aktiv").Not.Nullable().Default("True");

このテーブルを作成するステートメントでは、上記のマッピングに対応する行は次のようになります (実際には異なる型と異なるテーブルにあります)。

Karta NVARCHAR(255) default False  not null,
Aktiv BIT default True  not null,

Falseその名前の変数がなく、ブール値が SQL Server に存在しないため、where (明らかに)は機能しません。

これを解決するにはどうすればよいですか?

マッピングを使用し、依存する大規模なアプリケーションがあるため、マッピングを変更したくありません。たとえば、デフォルトの仕様を削除します。"False"ただし、動作するものに変更できれば"True"、それはまったく問題ありません。ただし、他の場所の動作が変更されないことが非常に明白である限りは.

4

1 に答える 1

1

.Defaultを変更しても問題ありません。プロパティがマッピングからデフォルトを取得しない場合、プロパティが初期化されていない場合、アプリはプロパティの言語のデフォルト(string = null、int = 0、bool = falseなど)からデフォルト値を受け取ります。コンストラクターまたはプロパティ初期化子(C#3)。

FNH .DefaultはDDLの作成にのみ関係し、アプリの動作は影響を受けません。

これらを次のように変更してもかまいません。

Map(x => x.Map).Not.Nullable().Default("'True'");
Map(x => x.Aktiv).Not.Nullable().Default("0");

あなたのチームがアプリの機能をNHに緊密に結合していることは非常に疑わしいです。それを容易にするAPIがあるとしても、NHのデフォルトまたはFNHのデフォルトからアプリのプロパティのデフォルトを取得するのは非常に困難です。知るための最良の方法は、チームにそれをしたかどうかを尋ねることです。

于 2011-07-09T02:26:11.990 に答える