0

Я пытаюсь создать 2 сущности, пользовательские и пользовательские обзоры, где отзывы пользователей содержат составные первичные ключи, которые являются идентификаторами пользователей, тот, кто прошел проверку и кто это сделал , этот составной первичный ключ также является внешним ключом к первичному ключу в таблице пользователя, однако EF создает дополнительный столбец, в котором я не вижу смысла в нем, также когда я сохраняю в db объект обзора пользователя в этой колонке не заполняется, он всегда пуст.Композитные первичные ключи и внешние ключи Код Первый

Это вызывает то, что при попытке получить пользователя с его отзывами коллекция отзывов всегда пуста, если столбец User_SubjectId содержит идентификатор пользователя.

Мой запрос как этот

return _context.Users 
       .Include(u => u.Reviews) 
       .Where(u => u.SubjectId.Equals(subjectId)); 

Коллекция Обзоры всегда пуст

объект Обзор пользователя

using System; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 

namespace API.Data.Entities 
{ 
    public class UserReview 
    { 
     [Key, Column(Order = 0), ForeignKey("Reviewer")] 
     public string ReviewerId { get; set; } //The user that wrote the review 

     [Key, Column(Order = 1), ForeignKey("ReviewedUser")] 
     public string ReviewedUserId { get; set; } //The user who was reviewed 

     [Required] 
     [Range(1, 5)] 
     public int Rating { get; set; } 

     [Required] 
     public DateTimeOffset DateCreated { get; set; } 

     [Required] 
     public virtual User Reviewer { get; set; } 

     [Required] 
     public virtual User ReviewedUser { get; set; } 
    } 
} 

Субъект Пользователь, как это

public class User 
    { 
     [Key] 
     [Required] 
     public string SubjectId { get; set; } 

     public User() 
     {     
      Reviews = new List<UserReview>(); 
     } 

     public virtual ICollection<UserReview> Reviews { get; set; }  
    } 

Однако, когда я добавляю миграции другой колонки получает созданный в моей таблице UserReviews, как показано на рисунке, колонка User_SubjectId

enter image description here

Я не знаю, если это ошибка в EF или я сделал неправильное отображение, в любом случае, какие-то идеи?

Благодаря

+0

Ваш неизвестный столбец создается свойством User.Reviews. Вы не указали свой внешний ключ, поэтому EF автоматически сгенерирует имя. – Kinetic

+0

Что вы имеете в виду, не отображается ?, проверьте мой объект UserReview, есть 2 внешних ключа –

+0

Обзоры связаны с каким-либо внешним ключом? – Kinetic

ответ

1

Вы должны использовать ReverseProperty аннотацию.

public class UserReview 
{ 
    [Key, Column(Order = 0), ForeignKey("Reviewer")] 
    public string ReviewerId { get; set; } //The user that wrote the review 

    [Key, Column(Order = 1), ForeignKey("ReviewedUser")] 
    public string ReviewedUserId { get; set; } //The user who was reviewed 

    [Required] 
    [Range(1, 5)] 
    public int Rating { get; set; } 

    [Required] 
    public DateTimeOffset DateCreated { get; set; } 

    [Required] 
    public virtual User Reviewer { get; set; } 

    [Required)] 
    public virtual User ReviewedUser { get; set; } 
} 

public class User 
{ 
    [Key] 
    [Required] 
    public string SubjectId { get; set; } 

    public User() 
    {     
     Reviews = new List<UserReview>(); 
    } 

    [InverseProperty("ReviewedUser")] // or Reviewer. 
    public virtual ICollection<UserReview> Reviews { get; set; }  
} 

На мой взгляд, это то, что легче настроить при использовании свободного отображения.

+0

Да, я закончил тем, что использовал плавное отображение, но ваш ответ указал мне в правильном направлении. –

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