5

tengo este código ASP.NET MVC3 que está accionado por resorte y Fluent NHibernate (NHib 3,1)no pudo resolver la propiedad: User.Full_Name de: Harrods.Core.Entities.Teacher

tengo este error:

could not resolve property: User.Full_Name of: Harrods.Core.Entities.Teacher 

[QueryException: could not resolve property: User.Full_Name of: Harrods.Core.Entities.Teacher] 
NHibernate.Persister.Entity.AbstractPropertyMapping.GetColumns(String propertyName) +104 
NHibernate.Persister.Entity.AbstractPropertyMapping.ToColumns(String alias, String propertyName) +57 
NHibernate.Persister.Entity.BasicEntityPropertyMapping.ToColumns(String alias, String propertyName) +100 
NHibernate.Persister.Entity.AbstractEntityPersister.ToColumns(String alias, String propertyName) +53 
NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetColumns(ICriteria subcriteria, String propertyName) +184 
NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetColumnsUsingProjection(ICriteria subcriteria, String propertyName) +134 
NHibernate.Criterion.CriterionUtil.GetColumnNamesUsingPropertyName(ICriteriaQuery criteriaQuery, ICriteria criteria, String propertyName) +45 
NHibernate.Criterion.CriterionUtil.GetColumnNames(String propertyName, IProjection projection, ICriteriaQuery criteriaQuery, ICriteria criteria, IDictionary`2 enabledFilters) +46 
NHibernate.Criterion.InsensitiveLikeExpression.ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery, IDictionary`2 enabledFilters) +101 
NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetWhereCondition(IDictionary`2 enabledFilters) +298 
NHibernate.Loader.Criteria.CriteriaJoinWalker..ctor(IOuterJoinLoadable persister, CriteriaQueryTranslator translator, ISessionFactoryImplementor factory, ICriteria criteria, String rootEntityName, IDictionary`2 enabledFilters) +447 
NHibernate.Loader.Criteria.CriteriaLoader..ctor(IOuterJoinLoadable persister, ISessionFactoryImplementor factory, CriteriaImpl rootCriteria, String rootEntityName, IDictionary`2 enabledFilters) +175 
NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList results) +412 
NHibernate.Impl.CriteriaImpl.List(IList results) +80 
NHibernate.Impl.CriteriaImpl.List() +104 
NHibernate.Criterion.QueryOver`1.List() +96 
NHibernate.Criterion.QueryOver`1.NHibernate.IQueryOver<TRoot>.List() +75 

este es el código que el problema parece venir de:

return session.QueryOver<Teacher>() 
        .Where(x => x.User.Full_Name.IsInsensitiveLike("%" + Search + "%")) 
        .OrderBy(x => x.Id).Asc 
        .Skip((skip - 1) * take) 
        .Take(take) 
        .List<Teacher>(); 

Mi clase Maestro tiene el siguiente aspecto:

[Serializable] 
public class Teacher 
{ 

    public virtual User User { get; set; } 
} 

Y mi clase de usuario se ve algo como esto:

public class User : BaseEntity<User> 
{ 

    public virtual string Email { get; set; } 
    public virtual string Full_Name { get; set; } 
} 

No está seguro de lo que está dando el problema. Todo se ve bien para mí. ¿Alguien tiene alguna idea de lo que está mal? :)

No estoy seguro pero tienen un aspecto algo similar, pero realmente no entienden cómo resolver todos modos:

NHibernate.QueryException with dynamic-component A correct way to load entities by Id list when Id is not mapped

EDIT: probado esto, pero que todavía da el mismo error : -

return session.QueryOver<Teacher>() 
        .JoinQueryOver<User>(u => u.User) 
        .Where(x => x.Full_Name.IsInsensitiveLike("%" + FullNameSearchFilter + "%")) 
        .OrderBy(x => x.Id).Asc 
        .Skip((skip - 1) * take) 
        .Take(take) 
        .List<Teacher>(); 

alias juzgado como bueno ..:

return session.QueryOver<Teacher>() 
        .JoinAlias(() => ML.User,() => U) 
        .Where(() => U.Full_Name.IsInsensitiveLike("%" + FullNameSearchFilter + "%")) 
        .OrderBy(x => x.Id).Asc 
        .Skip((skip - 1) * take) 
        .Take(take) 
        .List<Teacher>(); 

Ni trabajando!

EDITAR 2

los códigos SQL es que se mostraron correctamente; Puedo verificar esto a través de mi NHibernate Profiler. Pero por alguna razón, una vez que se cargan los datos, aparece el error y la transacción se revierte. ¿Ahora me parece que esto ya no es solo cuestión de consultas?

Respuesta

4

Tendrás que usar un JoinQueryOver o JoinAlias para lograr lo que estás pidiendo.

What is the difference between JoinQueryOver and JoinAlias?

Echa un vistazo a las secciones AssociationsAliases y en este artículo: http://nhforge.org/blogs/nhibernate/archive/2009/12/17/queryover-in-nh-3-0.aspx

+0

Esto es lo que probé, pero todavía l no está trabajando, no me corrija si escribía algo mal .. :) retorno session.QueryOver () .JoinQueryOver (u => u.User) .Where (x => x.Full_Name.IsInsensitiveLike (" % "+ FullNameSearchFilter +"% ")) .OrderBy (x => x.Id) .Asc .Skip ((omisión - 1) * tomar) .Tome (tome) .Lista (); – RicL

+0

¡Ninguno de los métodos funciona! :/JoinQueryOver y JoinAlias ​​dan el mismo error exacto. – RicL

+1

¿'Full_Name' es una columna mapeada en' User'? Además, ¿qué es 'MasterLicensee'? ¿No deberías devolver una lista de "Maestros" en lugar de "MaestroLicentario"? –

2

Esto funcionó para mí:

User userAlias = null; 
var list = session.QueryOver<Teacher>() 
        .JoinQueryOver(x => x.User,() => userAlias, JoinType.LeftOuterJoin) 
        .Where(x => x.FullName.IsInsensitiveLike("%" + "test" + "%")) 
        .OrderBy(x => x.Id).Asc 
        .Skip(1) 
        .Take(2) 
        .List(); //Without MasterLicensee 

Producido SQL (estoy usando SQL-CE para pruebas):

SELECT 
    this_.Id as Id2_1_, 
    this_.User_id as User2_2_1_, 
    useralias1_.Id as Id3_0_, 
    useralias1_.Email as Email3_0_, 
    useralias1_.FullName as FullName3_0_ 
FROM 
    "Teacher" this_ 
left outer join 
    "User" useralias1_ 
     on this_.User_id=useralias1_.Id 
WHERE 
    lower(useralias1_.FullName) like @p0 
ORDER BY 
    useralias1_.Id asc; 
@p0 = '%test%' [Type: String (0)] 
+0

el código sql se muestra correctamente; Puedo verificar esto a través de mi NHibernate Profiler. Pero por alguna razón, una vez que se cargan los datos, aparece el error y la transacción se revierte. ¿Ahora me parece que esto ya no es solo cuestión de consultas? – RicL

+0

¡Tu solución también funciona! ¡Gracias! – RicL

Cuestiones relacionadas