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ść?
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. –
Jeśli masz kontrolę nad nazwami jednostek, dlaczego nie nazwałbyś po prostu nazwą tabeli? – OpticalDelusion
Podnosisz dobry punkt. Mógłbym to zrobić, ale w tym momencie nadal chciałbym wiedzieć, dlaczego to nie działa. –