Как я должен запросить свойство свойства сохраненного объекта в nhibernate?

StackOverflow https://stackoverflow.com/questions/836388

Вопрос

Я чувствую себя глупо.

public class Uber
{
   public Foo Foo { get; set; }
   public Bar Bar { get; set; }
}

public class Foo
{
   public string Name { get; set; }
}

...

var ubercharged = session.CreateCriteria(typeof(Uber))
.Add(Expression.Eq("Foo.Name", "somename"))
.UniqueResult<Uber>();
return ubercharged;

Это приводит к тому, что " не удалось разрешить свойство " ошибка.

Что я делаю не так? Я хочу запросить объект Uber со свойством Foo, которое имеет имя " somename ".

обновлено на примере из реальной жизни, вызов репозитория с использованием свободного nhibernate:

    public UserPersonalization GetUserPersonalization(string username)
    {
        ISession session = _sessionSource.GetSession();

        var personuser = session.CreateCriteria(typeof(UserPersonalization))
            .Add(Expression.Eq("User.Username", username))
            .UniqueResult<UserPersonalization>();
        return personuser;

    }

Классы / отображения:

public class User
{
    public virtual Guid UserId { get; set; }
    public virtual string Username { get; set; }
    public virtual string Email { get; set; }
    public virtual string PasswordHash { get; set; }
    public virtual string PasswordSalt { get; set; }
    public virtual bool IsLockedOut { get; set; }
    public virtual bool IsApproved { get; set; }

}

public class Person
{
    public virtual int PersonId { get; set; }
    public virtual string Name { get; set; }
    public virtual Company Company { get; set; }

}

public class UserPersonalization
{
    public virtual int UserPersonalizationId { get; set; }
    public virtual Person Person { get; set; }
    public virtual User User { get; set; }
}

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Id(x => x.UserId).GeneratedBy.Guid().ColumnName("UserId");
        Map(x => x.Username);
        Map(x => x.PasswordHash);
        Map(x => x.PasswordSalt);
        Map(x => x.Email);
        Map(x => x.IsApproved);
        Map(x => x.IsLockedOut);
    }
}

public class UserPersonalizationMap : ClassMap<UserPersonalization>
{
    public UserPersonalizationMap()
    {
        WithTable("UserPersonalization");
        Id(x => x.UserPersonalizationId).ColumnName("UserPersonalizationId");
        References(x => x.Person).ColumnName("PersonId");
        References(x => x.User).ColumnName("UserId");
    }
}

public class PersonMap : ClassMap<Person>
{
    public PersonMap()
    {
        Id(x => x.PersonId).ColumnName("PersonId");
        Map(x => x.Name);
        References(x => x.Company).ColumnName("CompanyId");
    }
}
Это было полезно?

Решение

Попробуйте это:

var ubercharged = session.CreateCriteria(typeof(Uber))
        .CreateCriteria("Foo")
            .Add(Restrictions.Eq("Name", "somename"))
            .UniqueResult<Uber>();

Другие советы

Можете ли вы сортировать с использованием синтаксиса " ubercharged.AddOrder (Order.asc (" Foo.Name "))? Этот синтаксис должен работать в NHib 2.01. Если нет, ваши карты не работают правильно.

Ответ Стюарта должен хорошо работать для вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top