1

次のように、2つの列を1つのタイプにマップするIUserTypeがあります。

....
public object NullSafeGet(IDataReader rs, string[] names, object owner)
{
    return new FooBar(rs[names[0]], rs[names[1]]);
}
....

FluentNHibernateを使用して2つの列名を指定するのに問題があります。私はこれを試しました:

Map(x => x.Boz).Columns.Add("GLUB","SHERP").CustomType<FooBarUserType>();

ただし、2番目の列名は無視されます。Fluent NHibernateを使用して2つの列名を指定するにはどうすればよいですか?

4

2 に答える 2

1

私が取り組んでいたプロジェクトでも同じ問題がありました。

以下を使用して動作させることができました。

Map(x => x.Boz).Columns.Add("GLUB").Columns.Add("SHERP").CustomType<FooBarUserType>();
于 2013-10-07T19:43:14.587 に答える
1

ICompositeUserType を試してください。これにより、複数の列を処理できます。しかし、同僚はコンポーネント マッピングを忘れることがあります。コンポーネント マッピングは、多くの場合、使用可能で、マッピングがはるかに簡単です。

使用する

   Component(x=>x.Boz) //instead of Map(x=>x.Boz)

次のような ComponentMap マッピング クラスを作成します。

   public class FooBarMap: ComponentMap<FooBar>
       {
           public FooBarMap()
           {
               Map(x => x.FoobarProp1);
               Map(x => x.FoobarProp2);
           }
       }

これにより、元のテーブルに 2 つの列が作成されます (FooBar エンティティ用の独自のテーブルは作成されません): FooBarProp1 と FooBarProp2。

ICompositeUserType の代替手段は、流暢なバージョンではうまくいきません。「列の数が間違っています」というエラー メッセージが常に表示され、Columns.Clear() のようなヒントが機能しません。

よろしく、マイケル

于 2012-09-11T19:35:37.317 に答える