0

クラスを考えると:

public class VotingResult : DomainEntity
{
    public const string DefaultTag = "overall";

    public VotingResult()
    {
        Dimension = DefaultTag;
    }

    public virtual DomainEntity Item { get; set; }

    public virtual String Dimension { get; set; }

    public virtual double Value { get; set; }

    public virtual int VoteCount { get; set; }

    public virtual DateTime DateCreated {get; set;}

   }

そして、マッピング

public sealed class VotingResultMap : ClassMap<VotingResult>
{
    private VotingResultMap()
    {
        Id(x => x.Id);
        Map(x => x.Option);
        Map(x => x.Dimension);
        Map(x => x.DateCreated);
        Map(x => x.Value);
        Map(x => x.VoteCount);
        ReferencesAny(x => x.Item).AddMetaValues(); // extension method to add discriminators
    }
}

Linq または HQL を介して VotingResult.Item.GetType() を投影する方法はありますか (「VotingResult から r.class を選択する」は機能しないようです。参照をタイプと ID に簡単にフラット化します。理想的には、Linq または AliasToBeanResultTransformer を使用します。

記録として、DomainEntity サブクラスの継承マッピングは Table Per Class です。

ありがとう

4

1 に答える 1

0

LINQを使用すると、ロード後に投影できます

var results = Session.Query<VotingResult>()
    .Where( ...)
    .Include(result => result.Item)
    .AsEnumerable()
    .Select(result => new
    {
        ItemType = result.Item.GetType().Name,
        ItemId = result.Item.Id
    });
于 2011-11-02T09:44:46.880 に答える