2011-07-20 13 views
6

Wykonuję kod EF Pierwszy rozwój w stosunku do istniejącej bazy danych. Ponieważ dostałem schemat, a niektóre nazwy tabel nie są idealne, chciałbym nazwać pewne klasy encji inaczej niż tabela bazowa i wykonać mapowanie w OnModelCreating. Nie można odwzorować encji na tabelę, jeśli inna jednostka ma taką samą nazwę jak tabela

Nie wydaje się to działać, jeśli nazwa klasy encji koliduje z istniejącą nazwą tabeli, nawet jeśli zmienię je w kodzie.

Biorąc pod uwagę te (składa się na tym przykładzie) podmiot klas:

  • Widget
  • Gadget

Ja próbuje wykonać następujące mapowania w OnModelCreating:

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

W czasie wykonywania powoduje to następujący błąd:

System.InvalidOperationException : The entity types 'Widget' and 'Gadget' cannot share table 'Gadget' because they are not in the same type hierarchy or do not have a valid one to one foreign key relationship with matching primary keys between them.

To nie ma sensu, ponieważ mapuję element gadżetu z dala od tabeli Gadget, ale wygląda na to, że niektóre mapowania odbywają się automatycznie, mimo że określam je jawnie.

Jakie jest wytłumaczenie tego zachowania i czy można je obejść?

Odpowiedz

2

Czy Twoje jednostki i nazwy tabel są pojedyncze?

Pytam, że jeśli starali się zrobić coś takiego

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

może nie działać, ponieważ EF: CF odwzorowuje podmioty do ich liczbę mnogą tabelach umownie. Jeśli chcesz usunąć tę konwencję, po prostu usuń PluralizingTableNameConvention.

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
+0

Dzięki za sugestię, ale miałem już ten wiersz kodu na miejscu. Na kaprys próbowałem go usunąć, a wynik był taki sam. –

+0

Jeśli masz kontrolę nad nazwami jednostek, dlaczego nie nazwałbyś po prostu nazwą tabeli? – OpticalDelusion

+2

Podnosisz dobry punkt. Mógłbym to zrobić, ale w tym momencie nadal chciałbym wiedzieć, dlaczego to nie działa. –

1

FYI: EF WorkItem 1641 zauważono powyżej została ustalona na version 6.1.2

Powiązane problemy