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 回答