2014-06-24 5 views
0

Я использую структуру сущности, нетерпеливую загрузку, и я пытаюсь загрузить часть моего графика. У меня есть таблица Person, унаследованная кандидатом и тренером, и у меня есть проблема, когда кто-то является одновременно и тренером, и кандидатом (ПРИМЕЧАНИЕ: у тренера и кандидата нет никаких дополнительных свойств, только первичный ключ, унаследованный от Person).Включить навигационные свойства унаследованного объекта

Это мой запрос:

RequestInfo ri = context.RequestInfo.Include(x => x.Request).Include(x => x.TeamName).Include(x => x.Sender) 
       .Include(x => x.TrainingLanguage).Include(x => x.TrainingLocation).Include(x => x.CcPerson.Select(p => p.Person)) 
       .Include(x => x.Request.Select(c => c.Candidate)) 
       .Include(x => x.Request.Select(c => c.Candidate).Select(ct => ct.CandidateType)) 
       .Include(x => x.Request.Select(c => c.Candidate.CandidateType.Select(cwp => cwp.CandidateWorkPresence))) 
       .Where(x => x.Id == r.Id).Single(); 

Это, вероятно, могло бы быть лучше, но то, что у меня есть, как проблема, когда какой-то человек является кандидатом и тренер я получаю следующее исключение:

All objects in the EntitySet 'EmployeesTrainingEntities.Person' must have unique primary keys. However, an instance of type 'EmployeesTrainingModel.Candidate' and an instance of type 'EmployeesTrainingModel.Trainer' both have the same primary key value, 'EntitySet=Person;PersonId=5'. 

Я пытаюсь найти решение проблемы, но мне не повезло, и я увидел, что у многих людей есть эта проблема. Может быть, я что-то упустил, поэтому, если у кого-то есть какое-то решение, предложение, это приветствуется. Если необходимо, я добавлю фотографию, содержащую часть моей модели, которую я пытаюсь загрузить.

EDIT: Модель содержит RequestInfo лицо, которое имеет общую информацию о запросах на обучение. RequestInfo имеет коллекцию Requests, Sender, которая составляет Person и сбор CcPersons (лица, которые последуют за обучением). Request содержит Candidate.

Я нашел решение проблемы. Когда у меня есть человек, который Тренер и Кандидат, то, что я делаю, наследует перекрытие, и кажется, что EntityFramework не позволяет наложение наложения. Итак, я заменил отношения наследования с ассоциацией, и теперь он работает правильно.

+0

Использование наследования для вашей модели не кажется правильным. Если «Лицо» может быть как «Тренер», так и «Кандидат», вы не можете получить его из «Личности», потому что это означает, что «Лицо» может быть только ** либо «Тренер» ** или ** «Кандидат», но оба они оба. Возможно, у вас должен быть базовый элемент «Роль» и получить «Тренер» и «Кандидат» из «Роль». Затем дайте 'Person' a ** collection **' Role's. – Slauma

+0

Может случиться так, что какой-то Человек является как «Тренер», так и «Кандидат». У меня есть тренеры для какого-то курса, но в моем процессе возможно, что один из тренеров применит другого тренера для обучения, и его тренер будет кандидатом на обучение. Когда что-то подобное произойдет, я не могу включить информацию о кандидате в свой запрос, потому что в обеих таблицах «Кандидат» и «Тренер» есть тот же «PersonId». – Alt

+0

Я отредактировал сообщение с некоторым дополнительным объяснением части модели, потому что я не могу добавить фотографию. – Alt

ответ

0

Я не вижу смысла в создании двух дополнительных объектов, которые наследуются от человека, если у них нет дополнительных свойств.

Почему бы просто не отредактировать таблицу Person, чтобы включить свойство enum [flag] для PersonRole. Таким образом, вы можете назначить несколько ролей одному пользователю и сохранить их в int.

+0

Я этого не делал, потому что позже будет проще добавить какую-то новую роль, если это необходимо, или какое-то дополнительное свойство для учителя или кандидата, поэтому будет проще расширить модель. И даже теперь эти производные таблицы связаны с разными таблицами. – Alt

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