0

エンティティの自動マッピングをオーバーライドできるようにするための解決策を見つけようと懸命に努力しています。

実行の流れは、AutoMapping (規則を使用) が最初に発生し、次にマッピングのオーバーライドが実行されるというものです。

私のエンティティ「署名」は既にオートマッパーによってマップされており (オートマッパー ライブラリと混同しないでください!)、いくつかの列のデータベース タイプを変更したいと考えています。

私がこのようなことをすると:

public class SignatureMap : IAutoMappingOverride<Signature>
{
    public void Override(AutoMapping<Signature> mapping)
    {
        mapping.Map(x => x.SignType).CustomSqlType("character varying");
        mapping.Map(x => x.Status).CustomSqlType("integer").Nullable();
    }
} 

NpgsqlParameterCollectionテーブルへの挿入を実行しようとすると、NHibernate エラー(インデックスが範囲外) が発生します。

これはおそらく、mapping.Map関数が既に存在するマッピングをオーバーライドするのではなく、別のマッピングをコレクションに追加するだけであるためです (FluentNHibernate ソース コードを調べました)。

を使用して Sql 型をオーバーライドする適切な方法は何IAutoMappingOverrideですか?

4

1 に答える 1

1

使用するオーバーライド構文に問題はありません。次のことを確認してください
。1) 設定でオーバーライドされたマッピングを実際に参照する: .UseOverridesFromAssemblyOf<SignatureMap>();
2) NHibernate が DB スキーマを期待どおりに処理することを確認します。これには次のようなものを使用できますnew SchemaExport(config).Create(true, false);。これにより、SQLがコンソールに出力されます。

1 と 2 が問題ない場合は、挿入コードに問題がある可能性があります。

于 2013-03-09T15:58:22.127 に答える