\ Невозможно сопоставить объект с таблицей, если другой объект имеет то же имя, что и таблица

Я занимаюсь разработкой EF Code First для существующей базы данных.Поскольку мне передали схему и некоторые имена таблиц не идеальны, я хотел бы назвать определенные классы сущностей иначе, чем базовая таблица, и выполнить сопоставление в OnModelCreating.

Похоже, это не работает, если имя класса сущности конфликтует с именем существующей таблицы, даже если я переназначаю их в коде.

Учитывая эти (составленные для этого примера) классы сущностей:

  • Виджет
  • Гаджет

Я пытаюсь выполнить следующие сопоставления в OnModelCreating:

modelBuilder.Entity<Gadget>.ToTable("Sprocket");
modelBuilder.Entity<Widget>.ToTable("Gadget");

Во время выполнения это приводит к следующей ошибке:

System.InvalidOperationException: типы сущностей «Widget» и «Gadget» не могут совместно использовать таблицу «Гаджет», потому что они не принадлежат к одной иерархии типов или не имеют действительного отношения внешнего ключа «один к одному» с совпадающими первичными ключами между ними.

Это не имеет смысла, поскольку я отображаю сущность гаджета вдали от таблица гаджетов, но кажется, что некоторое сопоставление происходит автоматически, хотя я указываю это явно.

Каково объяснение такого поведения и можно ли его обойти?

6
задан abatishchev 4 March 2014 в 23:55
поделиться