EF Core пока не имеет какой-то более сложной обработки отношений (например, иерархической).
В вашем конкретном примере вы можете просто использовать
public class Animal {
public string Name {get; set;}
public byte[] Image {get; set;}
}
public class Cat : Animal {
public int Id {get; set;}
}
public class Dog : Animal {
public int Id {get; set;}
}
В EF 6,Вы могли бы иметь Animal, Dog & Cat все пойти на разные столы.EF установит для вас ключи и поля навигации.Тип объекта (Dog / Cat) будет контролировать, какие записи в Animal вы увидите.Обратите внимание, что это специализированный случай отношения один-к-одному (иерархический).
Вы упомянули много ко многим, но я нахожу маловероятным, что два животных имеют одно и то же изображение, и если дублирование имени по всемуразновидность - это проблема, переместите Name в производные классы (Dog / Cat).
В какой-то момент EF Core, вероятно, сделает это, я просто еще не видел (DataAnnotation / Fluent).