#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");