2

この継承マッピングを考えると:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <class name="User" table="[User]" abstract="true">
        <joined-subclass name="SubUser1" table="SubUser1">
            <key column="UserId" />
            ...
        </joined-subclass>
        <joined-subclass name="SubUser2" table="SubUser2">
            <key column="UserId" />
            ...
        </joined-subclass>
        <joined-subclass name="SubUser3" table="SubUser3">
            <key column="UserId" />
            ...
        </joined-subclass>
    </class>
</hibernate-mapping>

SubUser2とのすべてのインスタンスを照会するにはどうすればよいSubUser3ですか? 私はこれを行うことができることに気づきました:

session.Linq<User>().OfType<SubUser2>()

しかし、それでは単一のタイプでしかフィルタリングできません。私はこれを試しました:

session.Linq<User>().Where(user => user is SubUser2)

しかし、それはこのエラーを引き起こしました:

could not resolve property:  of: User

複数のサブタイプに対してクエリを表現する方法についてのアイデアはありますか?

4

2 に答える 2

1

私が知る限り、これは不可能です。おそらくそれは将来的になるでしょう。私は彼らがパッチを受け入れることを知っています:-)

私は約 500 のレコードと 4 つのタイプしか持っておらず、通常は同時に 2 つまたは 3 つのタイプに対してクエリを実行しています。今のところ、データベース内の各タイプにフィルターを適用してから、結果セットを連結し、メモリ内で順序付けとページングを行っています。

これは最も効率的なソリューションではありませんが、問題なく機能します。このクエリを有効にするためだけに、余分な識別子列を User テーブルに追加しないことにしました。

于 2009-08-30T17:29:30.950 に答える
0

このようなものはどうですか:

// Get them in 2 queries
var sub2 = session.Linq<SubUser2>().Select(x => x).ToList();
var sub3 = session.Linq<SubUser3>().Select(x => x).ToList();

// Join together in memory
var sub2And3 = sub2.OfType<User>().Union( sub3.OfType<User>() );
于 2009-08-30T03:53:15.637 に答える