NHibernate-别名和关联
我有一个实体,看起来像这样:NHibernate-别名和关联,nhibernate,Nhibernate,我有一个实体,看起来像这样: public class MyEntity { public virtual int Id { get; set; } public virtual string Name { get; set ; } public virtual Role UserRole { get; set; } } ICriteria c = Db.CreateCriteria<MyEntity>("m") .CreateAlias("Role", "r") .Se
public class MyEntity {
public virtual int Id { get; set; }
public virtual string Name { get; set ; }
public virtual Role UserRole { get; set; }
}
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>());
属性名称不是映射的属性,但Id和UserRole是。我想使用如下自定义条件填充此类:
public class MyEntity {
public virtual int Id { get; set; }
public virtual string Name { get; set ; }
public virtual Role UserRole { get; set; }
}
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}”的setter
所以我的问题是aliastobean不支持关联吗?如果它支持关联,正确的语法是什么?您应该将别名包装到UserRole而不是Role,因为属性的名称是UserRole,而不是Role。您应该将别名包装到UserRole而不是Role,因为属性的名称是UserRole,而不是Role