2011-10-28 55 views
0

鉴于类:投影在NHibernate的<Any>映射类型?

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(“从VotingResult选择r.class “似乎不起作用,但我可以使用一些令人讨厌的技巧,但我需要能够轻松地将参考文件变为类型和标识 - 理想情况下使用Linq或AliasToBeanResultTransformer。

对于记录,继承映射域实体的子类是Table Per Class。使用LINQ

感谢

回答

0

可以装载

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

感谢后的项目!将检查并报告。 – JBland