2010-12-17 63 views
2

我有一个看起来像这样的实体:NHibernate的 - AliasToBean和协会

public class MyEntity { 
public virtual int Id { get; set; } 
public virtual string Name { get; set ; } 
public virtual Role UserRole { get; set; } 
} 

属性“名”是不是一个映射属性,但“ID”和“UserRole的”是什么。我想用这样的自定义标准来填充这个类:

ICriteria c = Db.CreateCriteria<MyEntity>("m") 
.CreateAlias("Role", "r") 
.SetProjection(Projections.ProjectionList() 
.Add(
    Projections.SqlProjection(@"Name = case TypeId 
        when 2 then (select Name from tblOne where Id = EntityId) 
        when 4 then (select Name from tblTwo where Id = EntityId) 
        when 3 then (select Name from tblThree where Id = EntityId) 
        end", new string[] { "Name" }, new NHibernate.Type.IType[] { NHibernateUtil.String })) 
       .Add(Projections.Property("m.Id"), "Id") 
       .Add(Projections.Property("r.Id"), "UserRole.Id") 
       .Add(Projections.Property("r.Desc"), "UserRole.Desc") 
       .Add(Projections.Property("r.Permission"), "UserRole.Permission") 
    ) 
    .SetResultTransformer(Transformers.AliasToBean<EntityPermission>()); 

但是如果我执行此它抛出一个异常“类‘myEntity所’找不到属性的设置‘{} UserRole.Id’” 。

所以我的问题是不支持aliastobean协会,如果是的话,什么是正确的语法?

回答

0

由于属性的名称是“UserRole”,而不是“Role”,所以应该为“UserRole”而不是“Role”创建别名。