2011-06-28 16 views
1

Fluent NHibernateのマッピングを継承しました。これらのマッピングは現在プロジェクト内ですべて動作しています(つまり、アプリケーションが使用していて動作します)。しかし、実行されるSQL生成されたスクリプトは、いくつかの無効なコードを持ってい流暢なNHibernateのマッピングが無効になるCreateSchema SQL

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

を使用して、スキーマを生成するために - 古いものと新しいもの - 今、私はいくつかの新しいマッピングのための統合テストを構築するため、それらのすべてを使用しようとしています。問題のほとんどは、これら2例1のようにラインに由来するようだ:さ起こり

// 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内に存在しません。

どうすれば解決できますか?

マッピングを変更したくないのですが、それらを使用し、それに依存する大規模なアプリケーションがあります。私は分かりません(そして、この瞬間を知る必要はありません)私が言う、デフォルトの仕様を削除すると、バグが導入されます。もし私が"False""True"を動作させるものに変更できれば、それはまったく問題ありません。他のどこかの動作を変更しないことが非常に明白である限り。

答えて

1

.Defaultを変更しても問題ありません。アプリケーションはマッピングからデフォルトを取得しません。プロパティは、プロパティのデフォルト(文字列= null、int = 0、bool = falseなど)コンストラクタまたはプロパティ初期化子(C#3)で初期化されません。

FNH .DefaultはDDL作成にのみ関係しているため、アプリケーションの動作には影響しません。

それはこれにそれらを変更しても大丈夫です。私は非常にNHへのアプリの機能は、あなたのチームはしっかりと夫婦疑う

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

、それはNHのデフォルトまたはFNHのデフォルトからアプリのプロパティの既定値を取得する方法あまりにも面倒だとしてもあります容易にするためのAPI知っている最善の方法は、もしあなたがそれをしたかどうかあなたのチームに尋ねることです。

関連する問題