#c# #asp.net #entity-framework #asp.net-core #ef-code-first
#c# #asp.net #entity-framework #asp.net-core #ef-code-first
Вопрос:
Я создал пример приложения в ASP.NET Ядро с аутентификацией. Создано несколько таблиц, и приложение работает хорошо.
Теперь мне нужно создать новую таблицу «Организации». Эта таблица должна быть связана с таблицей по умолчанию «AspNetRoles» ключом foregin в отношении один ко многим. С каждой ролью может быть связано много организаций. Проблема в том, что я не могу найти эти таблицы по умолчанию в своем приложении и не знаю, как создать внешний ключ, используя первый подход code. Я пробовал что-то вроде этого:
public class Organization
{
public int OrganizationId {get; set;}
[ForeginKey="AspNetRoles"]
public int RoleId {get; set;}
}
Справка.
Ответ №1:
Наконец-то я узнал, как этого добиться.
public virtual string RoleId { get; set; }
[ForeignKey("RoleId")]
public virtual IdentityRole Roles { get;set; }
AspNetRoles называется IdentityRole.
Комментарии:
1. ПРИВЕТ @justme, из таблицы IdentityRole будет отношение «один ко многим» к таблице, содержащей IdentityRoles в качестве внешней таблицы, не могли бы вы рассказать, как вы этого добились?
Ответ №2:
Когда у вас есть свойство навигации для связанного объекта, просто назовите соответствующий ключ таким же, как свойство навигации, за которым следует Id или ID, и EF автоматически распознает его как внешний ключ для связанного объекта (например, Role — RoleId).
public string RoleId { get; set; }
public IdentityRole Role { get; set; }
вы можете прочитать больше о соглашениях об именовании в коде EF здесь
кроме того, вот хороший учебник по сложным моделям данных