¿Cómo se supone que debo consultar la subpropiedad de la propiedad de un objeto persistente en nhibernate?

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

Pregunta

Me siento tonto.

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;

Esto arroja un " no se pudo resolver la propiedad " error.

¿Qué estoy haciendo mal? Quiero consultar un objeto Uber que tenga una propiedad Foo que tenga un Nombre de "nombre de pila".

actualizado con ejemplo de la vida real, llamada al repositorio, usando nhibernate fluido:

    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;

    }

Las clases / asignaciones:

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");
    }
}
¿Fue útil?

Solución

Prueba esto:

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

Otros consejos

¿Puede ordenar usando la sintaxis " ubercharged.AddOrder (Order.asc (" Foo.Name "))? Esta sintaxis debería funcionar en NHib 2.01. Si no, sus mapas no funcionan correctamente.

La respuesta de Stuart debería funcionar bien para ti.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top