2013-11-22 4 views
2

Я потратил часы, пытаясь понять это, в том числе пройдя все ранее заданные вопросы по StackOverflow.nHibernate: не удалось разрешить свойство

я пытаюсь запросить от TrainingCourse по EvaluationHeadId, то будет отлично работает, однако, я стараюсь, чтобы получить TrainingRoute он возвращает «не может решить свойство: TrainingRoute.TrainingRouteDefinition из: Model.Entities.TrainingCourse»

это экономит отлично, моя настоящая проблема - это запрос.

обновлена:

  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. Единственное отличие этого заключается в том, что я также запрашиваю другие таблицы.

+0

показать нам отображение – kaptan

+0

жаль я далеко на момент (последняя минута) и не может проверить ваше решение или предоставить сопоставления. Постарайтесь сделать это как можно скорее. Добрый, голый со мной, пока я не сделаю ..... я попытался загрузить его с моим вопросом, но мне сказали, что мне нужно больше очков стека, чтобы это сделать. Как я могу сказать, что я здесь довольно новый ... в том числе для nhibernate – rommel

ответ

3

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. Associations

+0

жаль, что я ушел в данный момент (в последнюю минуту) и не могу проверить ваше решение или предоставить сопоставления. Постарайтесь сделать это как можно скорее. Добрый, голый со мной, пока я не сделаю ..... я попытался загрузить его с моим вопросом, но мне сказали, что мне нужно больше очков стека, чтобы это сделать. Как я могу сказать, что я здесь довольно новый ... в том числе для nhibernate – rommel

+0

Я пробовал еще один joinQueryOver, однако он помещает ошибку в строку, которая выполняет JoinQueryOver :: Delegate 'System.Func > 'не принимает 1 аргумент – rommel

+0

не могли бы вы удушить вопрос и показать код? Я хотел бы видеть изменения, которые вы сделали. Я протестировал свой предложенный сценарий, и он работает –

Смежные вопросы