\ Невозможно отобразить сущность в таблицу, если другая сущность имеет то же имя, что и таблица - PullRequest
6 голосов
/ 20 июля 2011

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

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

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

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

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

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 21 июля 2011

Ваши имена и имена в единственном числе?

Причина, по которой я спрашиваю, заключается в том, что если вы пытаетесь сделать что-то вроде

modelBuilder.Entity<Gadget>.ToTable("Sprockets")
modelBuilder.Entity<Widget>.ToTable("Gadgets")

это может не сработать, потому что EF: CF отображает сущности в их множественные таблицы по соглашению. Если вы хотите удалить это соглашение, просто удалите PluralizingTableNameConvention .

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
1 голос
/ 17 сентября 2014

К вашему сведению: EF WorkItem 1641, указанный выше, был исправлен на версии 6.1.2

0 голосов
/ 05 марта 2014

Это похоже на случай, когда таблица имеет одно и то же имя в другой схеме . До текущей даты поддержка EF в этом аспекте отсутствует. E.g.:

dict.Gadget
cnfg.Gadget

Пожалуйста, отметьте https://entityframework.codeplex.com/workitem/1641 и проголосуйте за повышение важности этого исправления.

...