NHibernate - AliasToBean и Ассоциации - PullRequest
       0

NHibernate - AliasToBean и Ассоциации

2 голосов
/ 17 декабря 2010

У меня есть объект, который выглядит следующим образом:

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'".

Итак, мой вопрос не в том, поддерживают ли алиасотные ассоциации, и если да, то каков правильный синтаксис?

1 Ответ

0 голосов
/ 10 мая 2011

Вы должны создать псевдоним «UserRole» вместо «Role», поскольку имя свойства «UserRole», а не «Role».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...