У меня есть объект, который выглядит следующим образом:
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>());
Однако, если я выполню это, он выдаст исключение "Не удалось найти установщик для свойства '{UserRole.Id}' в классе 'MyEntity'".
Итак, мой вопрос не в том, поддерживают ли алиасотные ассоциации, и если да, то каков правильный синтаксис?