2016-03-01 6 views
0

У меня возникла проблема с обратным свойством EF7. Есть два объекта, которые связаны таким образом.InverseProperty Entity Framework 7

public class Employee 
    { 
     public int Id { get; set; } 
    } 

public class Review 
{ 
    public int Id { get; set; } 

    [Required] 
    public virtual Employee Employee { get; set; } 

    [Required] 
    public Employee Manager { get; set; } 
} 

Я хочу, чтобы получить доступ к списку обзоров, когда я начинаю запрос своих сотрудников, так что я пытался сделать это:

public class Employee 
    { 
     public Employee() 
     { 
      Reviews = new List<Review>(); 
     } 
     public int Id { get; set; } 

     [InverseProperty("Employee")] 
     public virtual ICollection<Review> Reviews { get; set; } 
    } 

С этого запроса не хорошо сделано и вернуть этот ошибка:

Invalid column name 'EmployeeId1'.

Это часть запроса, в котором есть ошибка:

SELECT [ua].[Id], [r].[EmployeeId], [r].[EmployeeId1], [r1].[EmployeeId], [r1].[EmployeeId1] 
FROM [UserAssessment] AS [ua] 
LEFT JOIN [Review] AS [r] ON [ua].[ReviewId] = [r].[Id] 
LEFT JOIN [Review] AS [r1] ON [ua].[ReviewId] = [r1].[Id] 

Каждый знает, что я могу сделать?

UPDATE

Это заявление генерирует запрос:

return this.DbSet 
.Include(ua => ua.Employee).ThenInclude(t => t.Role) 
.Include(ua => ua.Review).ThenInclude(rt => rt.ReviewType) 
.Include(ua => ua.Review).ThenInclude(rt => rt.Manager).ThenInclude(r => r.Role) 

Я должен получить доступ с теми же includes, потому что ленивая загрузка не доступна на EF7 еще.

+4

Показать сообщение об ошибке и команду, которая вызывает его. С вашего конца вы также можете изучить сгенерированный SQL, чтобы увидеть, что он показывает. –

+0

Какой код генерирует этот оператор? Вы используете Code-First? Вы пытались создать новую БД с вашей моделью? – Edin

+0

@Edin, я обновил вопрос с помощью инструкции, которая генерирует запрос. Я использую код сначала, и я еще не пытался сгенерировать базу данных, потому что я не изменяю или не добавляю никаких полей и таблицы уже используется в других частях системы, поэтому я могу сделать такую ​​радикальную модификацию. – BernardoMorais

ответ

0

Вам нужен InverseProperty как на Работника и обзор

public class Review 
{ 
    public int Id { get; set; } 

    [Required] 
    [InverseProperty("Reviews")] 
    public Employee Employee { get; set; } 

    [Required] 
    public Employee Manager { get; set; } 
} 

public class Employee 
    { 
     public int Id { get; set; } 

     [InverseProperty("Employee")] 
     public ICollection<Review> Reviews { get; set; } 
    } 

должны работать. У меня есть аналогичная настройка, где она создает навигацию, не создавая никаких новых полей. Если это не поможет, дайте мне знать, и я закручу тестовый проект.

Также обратите внимание, что EF7 в настоящее время игнорирует виртуальный, и это не имеет значения, как в EF6.

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