#c# #macos #entity-framework-core #many-to-many #ef-core-5.0
#c# #macos #entity-framework-core #многие-ко-многим #ef-core-5.0
Вопрос:
Контекст
Я следую примерам нового моделирования отношений «Многие ко многим» в Entity Framework Core, на который ссылается здесь:
и командой, создающей его здесь (разверните сообщение от 23 июля 2020 года): https://github.com/dotnet/efcore/issues/19549
Я сделал это с новым проектом .NET Web API — единственным изменением является то, что в моей модели я использую объекты Staff и Team, а не объекты Post и Tag в примере.
Моя настройка
- macOS 10.15.7 (Catalina)
- .NET Framework 5.0.101
- Версия EF 5.0.1
Проблема
Когда я запускаю миграцию, EF создает таблицу поиска в сгенерированном коде SQL, как описано в документации, даже если объект поиска не определен. Это здорово.
Однако после того, как я применяю изменения SQL и запускаю приложение, при доступе к конечной точке API я получаю сообщение об ошибке:
The skip navigation 'Staff.Teams' has no foreign key defined.
Меня это смущает, поскольку в примерах нет внешних ключей, определенных в их моделях.
Я кое-что осмотрел, но так и не смог найти похожую проблему.
Интересно, может ли это быть проблемой.СЕТЬ на macOS.
Спасибо.
Ответ №1:
Лучше поделиться своей моделью и конфигурацией, если она существует. но вообще, вы можете установить отношение «многие ко многим» в ef 5 по соглашению (без настройки). вам просто нужно установить Collection
в каждой сущности, и ef автоматически создаст третью таблицу для этого отношения.
потому что у вас есть not defined foreign key
, я думаю, вы установили конфигурацию. Я могу только поделиться образцом, надеюсь, это поможет вам.
// MODEL
namespace EFConfiguration.Core.Domain.Relations
{
public class Course
{
public int Id { get; set; }
public string Name { get; set; }
public List<Tag> Tags { get; set; }
}
public class Tag
{
public int Id { get; set; }
public string Name { get; set; }
public List<Course> Courses { get; set; }
}
public class CourseTag
{
public int CourseId { get; set; }
public int TagId { get; set; }
public Course Courses { get; set; }
public Tag Tag { get; set; }
}
}
и конфигурация:
// CONFIG
public class CourseConfig : IEntityTypeConfiguration<Course>
{
public void Configure(EntityTypeBuilder<Course> builder)
{
builder.HasMany(x => x.Tags).WithMany(x => x.Courses)
.UsingEntity<CourseTag>(
r => r.HasOne(x => x.Tag).WithMany().HasForeignKey(x => x.TagId),
l => l.HasOne(x => x.Courses).WithMany().HasForeignKey(x => x.CourseId));
}
}