EF. Fluent API. Указание связей между таблицами

122
16 сентября 2019, 06:00

Вопрос по дизайну более, чем по какой-то проблеме. Как правильно указывать связи между таблицами. Связи ведь можно указать с двух таблиц, таким образом они дублируют друг друга. Пример

public void Configure(EntityTypeBuilder<Series> builder)
    {
        builder.ToTable("Series");
        builder.HasKey(s => s.SeriesId);
        // SERIES<->SUBSERIES: one to many
        builder.HasMany(s => s.Subseries)
               .WithOne(ss => ss.Series)
               .HasForeignKey(ss => ss.SeriesId);            
    }

и

public void Configure(EntityTypeBuilder<Subseries> builder)
    {
        builder.ToTable("Subseries");
        builder.HasKey(ss => ss.SubseriesId);
        // SUBSERIES<->SERIES: many to one
        builder.HasOne(ss => ss.Series)
               .WithMany(s => s.Subseries)
               .HasForeignKey(ss => ss.SeriesId);
    }

В таком случае мы дублируем указание внешнего ключа, также если добавить поведение по удаление - то будем дублировать и него (OnDelete(DeleteBehavior.*))

Такое описание не вызывает проблем при компиляции и выполнении,но может вызвать проблему и путаницу при несовпадении. Какая практика лучшего описания таблицы? ( я думаю, что лучше описывать внешний ключ и его поведение в таблице, где этот ключ существует, а в таблице, на которую он указывает его вообще никак не описывать; но все же я не уверен в этом)

Answer 1

Правильным будет связь один ко многим. У одного покупателя много покупок => даже если у многих покупок один покупатель, это все равно связь один ко многим. Правильным будет запись, как в первом случае - один к многим. Вы ведь описываете в БД реальные сущности, вот и думайте о них реально.

Пример MS SQL 1

Metanit неплохо об EF

READ ALSO
Обратиться из UserControl к MainWindow MVVM

Обратиться из UserControl к MainWindow MVVM

Подскажите, вот у меня есть UserControl на нем listBox, при нажатии на Item необходимо помещать Page во Frame Content главной формы (MainWindow)Как такое можно провернуть?

109
Unity, проверка наличия компонента в Editor

Unity, проверка наличия компонента в Editor

Недавно решил поиграть с кастомным Unity Editor

124
как добавить дату и время к строке

как добавить дату и время к строке

Подскажите, как можно с помощью php пересохранить файл с указанием даты и текущего времени?

186
php реферальная система

php реферальная система

Пишу многоуровневую реферальную систему с рангамиТ

121