Uruchamiam nową aplikację, która musi używać istniejącej bazy danych, która używa konwencji nazewnictwa, które są naprawdę denerwujące w .net (nazwy tabel zaczynają się od kilku trygramów określających domenę biznesową tabela, nazwy kolumn zaczynają się od tabel trygram, trygramy są pisane wielkimi literami i oddzielone znakami podkreślenia itp.).Zmiana nazw encji i właściwości w Database First
Chciałbym napisać prostą regułę zmiany nazwy (jest to tak proste, jak znalezienie ostatniego podkreślenia i wziąć wszystko później) i zastosować ją w Entity Framework. Naprawdę nie chcę edytować nazw jeden po drugim w edytorze, szczególnie dlatego, że baza danych może się zmienić i nie chcę tego robić kilka razy.
Używam Database First (ponieważ baza danych już istnieje i jest to "master") i EF 4.x DbContext Generator i działa naprawdę świetnie po wyjęciu z pudełka (z źle nazwanymi klasami i właściwościami) .
Edytowałem szablony T4 w celu zmiany nazwy wygenerowanych obiektów i właściwości, ale kiedy próbuję wykonać dowolne żądanie, obiekt DbContext nie może znaleźć tabeli, która pasuje do encji, której próbuję zażądać, a ja uzyskaj ten wyjątek:
Typ encji [Nazwa jednostki] nie jest częścią modelu dla bieżącego kontekstu .
Jest to oczywiste, dlaczego nie znajduje się w tabeli: nic nie mówi, jak dopasować nazwę jednostki i tabeli, jak zmieniłem go w locie. Przeczytałem, że mogę dodawać instrukcje w metodzie OnModelCreating(DbModelBuilder modelBuilder)
, ale nie jest to używane w Database First (a domyślny szablon T4 dodaje do niego wyjątek, na wszelki wypadek).
Więc teraz utknąłem, nie wiem jak określić to dopasowanie.
Oto kilka pomysłów mam, ale nie wiem, czy to jest poprawne, czy wykonalne:
- Korzystanie z „mnogą/pojedyncza” API do zmiany nazwy podmiotu? Brzmi jak brudne obejście. Ale to może działać (nie próbowałem).
- Znaleźć sposób edytowania pliku EDMX w locie.
- Edycja EDMX później, ale może to skomplikować proces (edytować w projektancie, następnie wykonać narzędzie, aby zmienić EDMX, a następnie uruchomić niestandardowe narzędzie do regeneracji encji i DbContext ... a dziś po prostu muszę edytować w projektancie).
- Korzystanie z kodu pierwszego (ponieważ wydaje się łatwiej używać różnych nazw obiektów niż nazw tabel, poprzez atrybuty lub instrukcje w klasie DbContext), ale wydaje się, że nie byłoby bardziej skomplikowane używanie go z istniejącą bazą danych.
Masz pomysł? Czy też coś mi umknęło?
Bałem się uzyskać tę odpowiedź :). Miałem nadzieję, że coś przeoczyłem. Wygląda na to, że ktoś już zrobił to narzędzie: http://blog.cincura.net/228749-making-names-of-entities-lub-ne-identifiers-in-entity-framework-model-code-and-developer-friendly -nie-wielkie / –