Чтобы ответить на мой собственный вопрос: проблема была в отображении отношений.Есть несколько связанных вопросов , которые совпадают с моими, но часто предлагается создать дополнительные поля, чтобы лучше описать отображение.Поскольку схема базы данных не должна была изменяться, это не вариант.
Как примечание, эта проблема не имеет большого отношения к SQLite.Однако странным является то, что все работало так, как описано в вопросе.Я не смотрел на то, что вызвало это, но похоже, что либо Entity Framework двоичных файлов SQLite обрабатывал этот случай иначе.Не сказать, что это была ошибка, но то, что основное различие между версиями делает вероятным, что оно как минимум связано с этим.
Тем не менее, это решение.Изначально ModelBuilder
имел следующие определения:
modelBuilder.Entity<Match>()
.HasOne(m => m.Home)
.WithMany()
.HasForeignKey(m => m.HomeId);
modelBuilder.Entity<Match>()
.HasOne(m => m.Away)
.WithMany()
.HasForeignKey(m => m.AwayId);
modelBuilder.Entity<Result>()
.HasOne(r => r.Match)
.WithOne()
.HasForeignKey<Result>(r => r.MatchId);
Одна проблема с этим в том, что сопоставления WithMany
из Match
были неверными.Изменение этого значения на WithOne
- хотя и более правильное - не имеет значения для проблемы.Это было исправлено удалением отображения отношений с Result
на Match
.По-видимому, это молчаливо отобразило обратную связь, выбрав одно из двух отношений к Result
.Поскольку (я предполагаю) Entity Framework позаботится об обратном отношении, как только будет указан один конец, это можно (нужно) оставить, чтобы исправить вещи и сохранить все переходы.
Для полноты, окончательное определение ModelBuilder
:
modelBuilder.Entity<Match>()
.HasOne(m => m.Home)
.WithOne()
.HasForeignKey(m => m.HomeId);
modelBuilder.Entity<Match>()
.HasOne(m => m.Away)
.WithOne()
.HasForeignKey(m => m.AwayId);