Я занимаюсь разработкой EF Code First для существующей базы данных. Поскольку мне передали схему, а некоторые имена таблиц не являются идеальными, я хотел бы назвать некоторые классы сущностей иначе, чем базовую таблицу, и выполнить сопоставление в OnModelCreating.
Это не работает, если имя класса сущности конфликтует с существующим именем таблицы, даже если я переназначу их в коде.
Учитывая эти (составленные для этого примера) классы сущностей:
Я пытаюсь выполнить следующие сопоставления в OnModelCreating:
modelBuilder.Entity<Gadget>.ToTable("Sprocket");
modelBuilder.Entity<Widget>.ToTable("Gadget");
Во время выполнения это приводит к следующей ошибке:
System.InvalidOperationException: типы сущностей 'Widget' и 'Gadget' не могут совместно использовать таблицу
"Гаджет", поскольку они не находятся в одной иерархии типов или не имеют действительного отношения внешнего ключа один к одному с соответствующими первичными ключами между ними.
Это не имеет смысла, так как я сопоставляю сущность гаджета с таблицей гаджетов, но кажется, что некоторое сопоставление происходит автоматически, хотя я указываю его явно.
Чем объясняется такое поведение и можно ли его обойти?