Наследование не изменяет правило, согласно которому одно навигационное свойство ссылки может быть отображено только в одно обратное свойство навигации коллекции.
На самом деле происходит следующее: вторая HasMany
/ WithOne
переопределяет предыдущую (вероятно, ошибка должна вызывать исключение), поэтому Link.Site
сопоставляется с Site.AudioLinks
(не то, что Site
является свойством базовой сущности Site
, поэтому совместно используется AudioLink
и VideoLink
).
Таким образом, необходимо либо удалить свойства Site
и SiteId
из базового класса и поместить их в производные классы (которые будут вводить 2 отношения FK), либо лучше использовать свойство навигации для одной коллекции базового типа. :
public class Site
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Link> Links { get; set; }
}
и отображение:
builder.Entity<Site>().HasMany(s => s.Links)
.WithOne(l => l.Site)
.HasForeignKey(l => l.SiteId);
Вы всегда можете использовать оператор OfType()
, чтобы получить AudioLinks
или VideoLinks
из Links
как в запросе LINQ to Entities, так и в LINQ to Objects после материализации Site
.