Реализация объединения таблиц many-to-many в asp.net core
Есть таблица Menu, который содержит в себе Роли, для которых это меню может показываться
public class Menu : BaseEntity, IAggregateRoot
{
public string Name { get; set; }
public int? Priority { get; set; }
public virtual IEnumerable<MenuRole> Roles { get; set; }
}
Так же есть таблица Role, расширяющий основную модель роли добавляя туда список Menu
public class Role : IdentityRole
{
public virtual IEnumerable<MenuRole> Menu { get; set; }
}
И есть объединяющая таблица
public class MenuRole
{
public int MenuId { get; set; }
public virtual Menu Menu { get; set; }
public string RoleId { get; set; }
public virtual Role Role { get; set; }
}
Я помню, что раньше в ЕF можно было не создавать доп. таблицу, она автоматически формировалась при миграции в БД, сейчас же она нужна, и по этому добавляются лишние переходы при получении Ролей:
Menu.Roles.Select(x=> x.Role...)
Можно ли как ни будь смапить или сформировать данные пришедшие с БД сразу в список IEnumerable < Role > и пропускать эту таблицу из выборки?
Ответы (1 шт):
Если вы используете Entity Framework Core, то такая возможность появилась в 5 версии. На данный момент доступен второй релиз кандидат и по заверения Microsoft он готов для использования на боевой среде. Достаточно будет описать модель следующим образом:
public class Menu : BaseEntity, IAggregateRoot
{
public string Name { get; set; }
public int? Priority { get; set; }
public virtual IEnumerable<Role> Roles { get; set; }
}
public class Role : IdentityRole
{
public virtual IEnumerable<Menu> Menu { get; set; }
}
Обновите ваши nugget пакеты EF Core до версии "5.0.0-rc.*", для более ранних версии EF Core, необходимо создавать объединяющую сущность модели.
Более подробно можно почитать здесь.