nHibernate:无法解析属性

罗梅尔

我花了数小时试图弄清楚这一点,包括遍历了StackOverflow上的所有先前提出的问题。

我正在尝试通过EvaluationHeadId从TrainingCourse中查询,那很好,但是,我尝试获取返回“无法解析属性:Model.Entities.TrainingCourse的TrainingRoute.TrainingRouteDefinition”的TrainingRoute。

它保存完美,我真正的问题是查询。

更新为:

            using (var session = SessionProvider.Instance.OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    dto = session.QueryOver<TrainingCourse>()  
                            .JoinQueryOver<EvaluationHead>(p => p.EvaluationHeads)
                            .JoinQueryOver<TrainingRoute>(p => p.TrainingRoute)
                            .Where(c => c.EvaluationHeadID == headId)
                            .SelectList(l => l
                                .Select(h => h.TrainingCourseDefn).WithAlias(() => d.TrainingCourseDefn)
                                .Select(h => h.IsAvailable).WithAlias(() => d.IsAvailable)
                                .Select(h => h.TrainingRoute.TrainingRouteDefinition).WithAlias(() => d.TrainingRouteDefinition))
                            .TransformUsing(Transformers.AliasToBean<TrainingCourseDTO>())
                            .List<TrainingCourseDTO>();

                    transaction.Commit();           
                }
            }

映射:

        public TrainingCourseMap()
    {
        Id(x => x.TrainingCourseID).GeneratedBy.Identity();
        Map(x => x.TrainingCourseDefn);
        Map(x => x.IsAvailable);
        Map(x => x.TrainingCourseCreatedBy);
        Map(x => x.TrainingCourseDtCreation);
        Map(x => x.TrainingCourseDtModified);
        Map(x => x.TrainingCourseModifiedBy);

        References(x => x.TrainingRoute).Column("TrainingRouteID").Cascade.None();
        HasManyToMany(x => x.EvaluationHeads).Table("EvaluationTraining").ParentKeyColumn("TrainingCourseID").ChildKeyColumn("EvaluationHeadID").Inverse().Cascade.All();
    }

        public EvaluationHeadMap()
    {
        Id(x => x.EvaluationHeadID).GeneratedBy.Identity();
        Map(x => x.ManagerID);
        Map(x => x.SupervisorID);
        Map(x => x.EvaluationStartPeriod);
        Map(x => x.EvaluationEndPeriod);
        Map(x => x.EmployeeScalePoint);
        Map(x => x.KRASignature);
        Map(x => x.KRASignatureDate);
        Map(x => x.DateCreated);
        Map(x => x.DateModified);
        HasMany(x => x.KeyResultAreas).KeyColumn("EvaluationHeadID").Cascade.All().Inverse();
        HasMany(x => x.Evaluations).KeyColumn("EvaluationHeadID").Inverse().Cascade.All();

        HasManyToMany(x => x.TrainingCourses).Table("EvaluationTraining").ParentKeyColumn("EvaluationHeadID").ChildKeyColumn("TrainingCourseID").Cascade.All().AsBag();

        References(x => x.Stage).Column("StageID").Cascade.None();
        References(x => x.Employee).Column("EmployeeID").Cascade.None();
        References(x => x.Employment).Column("EmploymentID").Cascade.None();
        //References(x => x.Manager).Column("EmployeeID");
        //References(x => x.Supervisor).Column("EmployeeID");
    }

    public TrainingRouteMap()
    {
        Id(x => x.TrainingRouteID).GeneratedBy.Identity();
        Map(x => x.TrainingRouteDefinition);
        Map(x => x.TrainingRouteDescription);
        HasMany(x => x.TrainingCourses).KeyColumn("TrainingRouteID").Cascade.AllDeleteOrphan().Inverse();
    }

注意:我在TrainingCourse和TrainingRoute之间有另一个查询,即使通过TrainingCourse.TrainingRoute.x模式访问属性,也没有任何问题。唯一的区别是查询其他表也是如此。

拉迪姆·科勒

TrainingRoute是的参考属性TrainingCourse(以及EvaluationHeads)。因此,您还必须使用JoinQueryOver或JoinAlias。下面,我们将创建用于别名的虚拟对象(全部设置为null)。我们还拆分了查询的联接,因为它们导致对新创建的查询的引用

TrainingCourse trainingCourse = null;
TrainingRoute trainingRoute = null;
EvaluationHead evaluationHead = null;

var query = session.QueryOver<TrainingCourse>(() => trainingCourse);

// here we can work with criteria against the TrainingRoute
var referenceToTraingRouteQuery = query
    .JoinQueryOver<TrainingRoute>(p => p.TrainingRoute, () => trainingRoute);

// here we can filter the EvaluationHead collection
var referenceToEvaluationHeadQuery = query // here we start again from the base query
    .JoinQueryOver<EvaluationHead>(p => p.EvaluationHeads, () => evaluationHead)
    .Where(c => c.EvaluationHeadID == headId);

dto = query
    .SelectList(l => l
        .Select(() => trainingCourse.TrainingCourseDefn)
                     .WithAlias(() => d.TrainingCourseDefn)
        .Select(() => trainingCourse.IsAvailable)
                     .WithAlias(() => d.IsAvailable)

        // now let's used join alias
        .Select(() => trainingRoute.TrainingRouteDefinition)
                     .WithAlias(() => d.TrainingRouteDefinition))

     .TransformUsing(Transformers.AliasToBean<TrainingCourseDTO>())
     .List<TrainingCourseDTO>();

或者,您可以使用JoinAlias,更多信息请参见16.4。社团协会

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

NHibernate:无法解析属性:empAlias

来自分类Dev

流利的NHibernate“无法解析属性”

来自分类Dev

NHibernate抛出“无法解析属性”异常

来自分类Dev

流利的NHibernate-NHibernate.QueryException:无法解析属性

来自分类Dev

NHibernate无法解决属性“类”

来自分类Dev

无法解析以下属性:CS $ <> 8__locals2 of:BusinessObjectMain; Nhibernate QueryOver Linq,for循环内的lambda表达式

来自分类Dev

流利的NHibernate OneToOne属性将无法加载

来自分类Dev

休眠无法解析属性

来自分类Dev

Spring无法解析属性

来自分类Dev

nHibernate不能解析所有字段的属性

来自分类Dev

Hibernate QueryException:无法解析属性

来自分类Dev

无法解析KeyColumn上的属性

来自分类Dev

休眠标准无法解析属性

来自分类Dev

ElementName绑定无法解析属性

来自分类Dev

HIBERNATE-无法解析属性

来自分类Dev

XML无法正确解析属性

来自分类Dev

ElementName绑定无法解析属性

来自分类Dev

HIBERNATE-无法解析属性

来自分类Dev

通过代码进行Nhibernate映射,无法确定属性的类型

来自分类Dev

无法在父标记中解析Maven属性

来自分类Dev

ListView组标题无法解析绑定属性

来自分类Dev

Angular Bootstrap uibModal无法解析属性

来自分类Dev

GraphQL无法解析嵌套对象属性

来自分类Dev

无法使用QueryOver解析复合属性

来自分类Dev

无法解析索引0处的属性

来自分类Dev

org.hibernate.QueryException:无法解析属性

来自分类Dev

无法解析属性:userId.username

来自分类Dev

MvcMusicStore教程-视图无法解析模型属性

来自分类Dev

无法解析android中的xml属性