Мои модели без аннотаций внешнего ключа:
Division {
[Key]
public int Id { get; set; }
public ICollection<Rooms> DivisionRooms { get; set; }
public ICollection<Desks> DivisionDesks { get; set; }
}
//------------------------------------------
Rooms {
[Key]
public int Id { get; set; }
public int DivisionId { get; set; }
public Division Division { get; set; }
public ICollection<Desks> DivisionDesks { get; set; }
}
//------------------------------------------
Desks {
[Key]
public int Id { get; set; }
public int DivisionId { get; set; }
public Division Division { get; set; }
public int RoomId { get; set; }
public Room Room { get; set; }
}
С помощью свободно работающих API я создаю индексы и т. Д. c ... Если я добавлю миграцию для этого, код автоматически автоматически выберет внешние ключи и Код миграции все в порядке. Но при создании базы данных с помощью команды Update-Database она говорит:
Introducing FOREIGN KEY constraint etc..etc.. may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Теперь, чтобы добавить каскадные ограничения, Если я добавлю определения внешнего ключа через свободный API (например: - Для сущности Desk)
builder.HasOne<Room>()
.WithMany()
.HasForeignKey(e => e.RoomId)
.OnDelete(DeleteBehavior.Restrict);
Генерирует скрипт миграции, имеющий дублированные внешние ключи. Но Update-Database работает и создает базу данных с сущностью Room с дублированными внешними ключами для двух других сущностей.
В общем, если я использую аннотации данных; при запуске update-database он жалуется на проблемы с каскадом, а если я использую беглый apis и ограничиваю каскады, он создает дубликаты внешних ключей.
Так как же мне правильно определить эту модель с включенной навигацией?