У меня есть несколько иерархий наследования в моей модели. Я использую Entity Framework Core 3.1.2 с базой данных Postgres. Код первый. Я пытаюсь создать миграцию для генерации таблиц своей базы данных.
Я сопоставил свой первый абстрактный объект
public DbSet<Asset> Assets { get; set; }
Я узнал, что вы не можете отобразить абстрактный класс без сопоставления с конкретным потомком .
The corresponding CLR type for entity type 'Asset' is not instantiable and there is no derived entity type in the model that corresponds to a concrete CLR type.
Итак, я сопоставляю потомков.
public DbSet<LinearAsset> LinearAssets { get; set; }
public DbSet<StructureAsset> Structures { get; set; }
public DbSet<BridgeAsset> Bridges { get; set; }
public DbSet<RoadAsset> Roads { get; set; }
и все хорошо. Fantasti c.
Однако. Когда я прихожу, чтобы отобразить свою вторую иерархию наследования (и любую другую, которую я пробую), я попадаю в этот странный круговой аргумент, где я и должен, и не должен отображать детей.
public DbSet<Attachment> Attachments { get; set; }
public DbSet<AssetAttachment> AssetAttachments { get; set; }
дает мне
The entity type 'AssetAttachment' cannot be mapped to a table because it is derived from 'Attachment'. Only base entity types can be mapped to a table.
Если я удалю сопоставление для AssetAttachments, я вернусь к этому
The corresponding CLR type for entity type 'Attachment' is not instantiable and there is no derived entity type in the model that corresponds to a concrete CLR type.
Я не смог найти сколько-нибудь значимого различия между иерархией наследования активов, которая работала, и другие иерархии наследования, которые не работают.
Я пробовал различные способы отображения или не отображения объектов-потомков, но всегда возвращается одно из двух приведенных выше сообщений об ошибках. От меня ожидают, что я буду наносить на карту, а не наносить на карту потомков, поэтому я очень смущен тем, что на самом деле хочет от меня Дот Net.
Может ли кто-нибудь дать мне несколько советов о том, как мне поступить два конфликтующих сообщения об ошибках?