1

テーブル A オブジェクトがいくつかのテーブル B レコードを 1 対多としてマッピングする必要がある状況に遭遇しましたが、テーブル B には特定のテーブル A レコードにリンクされた非常に多くのレコードがあり、どのレコードがそれを作成するかをさらに制限したいと考えています。 1 対多。これは、運用中の他のレガシー プログラムのために簡単に変更できないレガシー データベース構造です。

テーブル B が次のようになっているとします。

TableBPKey (int not null)
TableAFKey (int not null)
TableBColumn1 (char(4) null)
TableBColumn2 (varchar(50) null)

TableBColumn1 レコードに、テーブル B レコードを何らかの方法で分類する 'N' 4 文字コードのいずれかが含まれているとします。

とにかく、TableAFKey 列を使用して 1 対多を既にマップしたとしましょう。たとえば、TableBColumn1 == "ABCD" のレコードのみが必要であることをマッピングに伝えることはできますか?

コードによるマッピングを使用するものはすべて、推奨されるソリューションです。古い xml マッピングで実行できても、コードによるマッピングでは実行できない場合は、それも解決策と見なします。

ありがとう!

4

2 に答える 2

1

一対多の「式」メソッドは、あなたが求めているものだと思います。これを使用して、「is_active = 1」などの追加の SQL 基準を指定できるはずです。

詳細については、こちらをご覧ください。 http://notherdev.blogspot.com.au/2012/02/mapping-by-code-map.html

(更新されたリンク)

于 2012-04-05T01:32:42.593 に答える
0

map.Where() は私が欲しかったものです。私はそれをテストし、それは動作します。sql Where 句の後に機能する sql 式を配置すると、結果がそのように制限されます。

Set<TableBObject>(x => x.TableBRecordsABCDOnly, map =>
            {

                map.Inverse(true);
                map.Cascade(Cascade.All);
                map.Key(k => k.Column(c => c.Name("TableAFKey")));
                map.Where("TableBColumn1 = 'ABCD'");

            },
            action => action.OneToMany());
于 2012-04-05T01:47:20.863 に答える