0

Logというタイプでプロジェクションを実行しようとしています。ログはCompanyというスーパークラスを参照します。各会社タイプは、サブクラスごとにテーブルにマップされます。

ログで予測を行うときに、会社のタイプを取得することはできますか?現在、各サブクラスにEnumプロパティ(マップされていない)があるため、Companyタイプで切り替えを実行できますが、何にもマップされていないため、投影を行うことができません。

私は試しProjections.Property("log.Company.class")ましたが、うまくいきません:(

PS:この質問に適切なタグをたくさん見つけることができませんでした。より具体的なタグのアイデアがあれば教えてください。

4

1 に答える 1

1

あなたは次のことができます...

session.CreateCriteria<Log>()
       .CreateAlias("Company", "company")
       .SetProjection(Projections.Property("company.class"))

ただし、その射影はフィルタリングと順序付けにのみ使用できます。NHibernateは結果セットのSystem.Typeを返しません(内部で使用される整数を返します)。

会社の具体的な種類を知る必要がある場合は、次のことができます。

var logs = session.CreateCriteria<Log>()
                  .SetFetchMode("Company", FetchMode.Join) //avoid SELECT N+1
                  .List<Log>()

次に、各行のタイプを取得するには、次のようにします。

foreach (var log in logs)
    string companyClassName = session.GetEntityName(log.Company);
于 2010-05-07T15:32:02.870 に答える