Расширить отношение идентификации ядра сети Asp

#asp.net-core #entity-framework-core #asp.net-identity

#asp.net-core #сущность-структура-ядро #asp.net-identity

Вопрос:

В идентификаторе ядра сети Asp (3.1) я хочу добавить отношения «многие ко многим» между пользователем и туроператорами. (Концепция заключается в том, что многие пользователи могут следить за многими туроператорами).

У меня есть класс tour operators:

 public class TourOperator
{
   public int Id { get; set; }
   public ICollection<Follow> Follows { get; set; }
}
 

Я расширил класс UserIdentity:

 public class ApplicationUser: IdentityUser
{
    public ICollection<Follow> Follow { get; set; }
}
 

У меня есть следующий класс:

 public class Follow
{
    public long Id { get; set; }

    public string UserId { get; set; }
    public ApplicationUser ApplicationUser { get; set; }
    
    public int TourOperatorId { get; set; }
    public TourOperator TourOperator{ get; set; }
}
 

После выполнения миграции, почему в следующей таблице у меня есть 4 поля вместо 3?
У меня есть следующее поле:
введите описание изображения здесь

Я думаю, что ApplicationUserId не может присутствовать

Комментарии:

1. Вам нужно указать EF, который UserId является ключом для ссылки ApplicationUser

2. Одним словом: соглашения . ApplicationUser -> ApplicationUserId

Ответ №1:

Entity Framework не имеет возможности связать свойства UserId and ApplicationUser . Таким образом, вам либо нужно следовать соглашению, в соответствии с которым EF может сделать обоснованное предположение. Самый простой вариант — переименовать ваше string свойство:

 public string ApplicationUserId { get; set; }
 

Кроме того, вы можете настроить его, например, с помощью атрибута:

 [ForeignKey("ApplicationUser"]
public string UserId { get; set; }
public ApplicationUser ApplicationUser { get; set; }
 

Или в OnModelCreating методе, например:

 modelBuilder.Entity<Follow>()
    .WithOne(f => f.ApplicationUser)
    .HasForeignKey("UserId");