Проекция на тип в <Any>отображении в NHibernate? - PullRequest
0 голосов
/ 29 октября 2011

Учитывая класс:

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
    }
}

Есть ли способ проецирования VotingResult.Item.GetType () через Linq или HQL («Выбор r.class из VotingResult» не работает. Есть некоторые неприятные приемы, которые я могу использовать, но мне нужно быть в состоянии легко сгладить ссылку в тип и идентификатор - в идеале, используя Linq или AliasToBeanResultTransformer.

Для записи, отображение наследования для подклассов DomainEntity: Таблица на класс.

Спасибо

1 Ответ

0 голосов
/ 02 ноября 2011

используя LINQ вы можете проецировать после загрузки

var results = Session.Query<VotingResult>()
    .Where( ...)
    .Include(result => result.Item)
    .AsEnumerable()
    .Select(result => new
    {
        ItemType = result.Item.GetType().Name,
        ItemId = result.Item.Id
    });
...