5

मैं इस ASP.NET MVC3 कोड है कि वसंत और धाराप्रवाह NHibernate (NHIB 3.1)हल नहीं कर सका संपत्ति: User.Full_Name की: Harrods.Core.Entities.Teacher

द्वारा संचालित रहा है मैं इस त्रुटि है:

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 

इस कोड को समस्या लगता है कि से आ रही है:

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>(); 

मेरे शिक्षक वर्ग इस तरह दिखता है:

[Serializable] 
public class Teacher 
{ 

    public virtual User User { get; set; } 
} 

और मेरे उपयोगकर्ता वर्ग इस तरह दिखता है:

public class User : BaseEntity<User> 
{ 

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

सुनिश्चित नहीं हैं कि क्या समस्या दे रही है। सब कुछ ठीक दिखता है। किसी के पास कोई विचार है क्या गलत है? :)

सुनिश्चित नहीं हैं, लेकिन वे कुछ हद तक ही लगते हैं लेकिन वास्तव में समझ में नहीं आता वैसे भी हल करने के लिए कैसे:

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

संपादित करें: इस कोशिश की, लेकिन अब भी वही त्रुटि दे रही है : -

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>(); 

कोशिश उपनाम के रूप में अच्छी तरह से ..:

0,123,
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>(); 

न तो काम कर रहा है!

संपादित 2

एसक्यूएल कोड सही ढंग से दिखाया जा रहा है; मैं इसे अपने एनएचबीर्नेट प्रोफाइलर के माध्यम से सत्यापित कर सकता हूं। लेकिन किसी कारण से डेटा लोड हो जाने के बाद, यह त्रुटि को पॉप करता है और लेनदेन वापस लुढ़का जाता है। अब मुझे लगता है कि यह सिर्फ क्वेरीओवर के बारे में नहीं है?

उत्तर

4

आप जो भी मांग रहे हैं उसे पूरा करने के लिए आपको JoinQueryOver या JoinAlias का उपयोग करना होगा।

What is the difference between JoinQueryOver and JoinAlias?

इस लेख में वर्गों Associations पर एक नज़र और Aliases लें: http://nhforge.org/blogs/nhibernate/archive/2009/12/17/queryover-in-nh-3-0.aspx

+0

यह है कि मैं क्या करने की कोशिश की, लेकिन stil है एल काम नहीं कर रहा, क्या मुझे ठीक कर लें मैंने कुछ गलत लिखा .. :) वापसी session.QueryOver () .JoinQueryOver (यू => u.User) .Where (x => x.Full_Name.IsInsensitiveLike (" % "+ FullNameSearchFilter +"% ")) । ऑर्डर बी (x => x.Id) .एससी .Skip ((छोड़ें - 1) * ले लें) ।ले लो (ले लो) । लिस्ट <मास्टरलिसेन्से>(); – RicL

+0

न तो विधियां काम करती हैं! :/दोनों JoinQueryOver और JoinAlias ​​एक ही सटीक त्रुटि देता है। – RicL

+1

'उपयोगकर्ता_' में 'पूर्ण_नाम' एक मैप किए गए कॉलम है? 'मास्टरलिसेन्से' भी क्या है? क्या आप 'मास्टरलिसेन्से' के बजाय 'शिक्षक' की सूची वापस नहीं कर रहे हैं? –

2

यह मेरे लिए काम किया:

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 

उत्पादित एसक्यूएल (मैं परीक्षण के लिए एसक्यूएल-सीई उपयोग कर रहा हूँ):

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

एसक्यूएल कोड सही ढंग से दिखाया जा रहा है; मैं इसे अपने एनएचबीर्नेट प्रोफाइलर के माध्यम से सत्यापित कर सकता हूं। लेकिन किसी कारण से डेटा लोड हो जाने के बाद, यह त्रुटि को पॉप करता है और लेनदेन वापस लुढ़का जाता है। अब मुझे लगता है कि यह सिर्फ क्वेरीओवर के बारे में नहीं है? – RicL

+0

आपका समाधान भी काम करता है! धन्यवाद! – RicL

संबंधित मुद्दे