Używamy EF 4.0 z podejściem bazodanowym z wykorzystaniem modelu .edmx
.Wpływające na tworzenie klas encji w kodzie EF 6 z bazy danych
Przeprowadzamy teraz uaktualnienie do wersji 6.1.3, a my badamy, czy warto zastosować ten model .edmx
, czy też nie. Zdecydowanie nadal chcemy mieć kontrolę nad naszym schematem bazy danych - będziemy więc tworzyć nowe tabele itp. Za pomocą skryptu SQL, a następnie generować model EF (albo .edmx
lub tylko klasy kodu) z istniejącej bazy danych.
Podczas moich prób z Visual Studio 2013, zauważyłem irytujący punkt, gdy EF 6 tworzy klasy z istniejącej bazy danych. Mam klasę Customer
, która łączy się z klasą Contact
trzy razy - raz dla DesignContact
, raz dla SalesContact
i po raz trzeci dla SupportContact
. Są one przechowywane w kolumnach DesignContactId (INT)
itd. W tabeli Customer
.
Można tworzyć te klasy przy użyciu tego T-SQL:
CREATE TABLE dbo.Contact
(
ContactID INT NOT NULL
CONSTRAINT PK_Contact PRIMARY KEY CLUSTERED,
Name VARCHAR(200),
Address VARCHAR(200),
ZipCode VARCHAR(20),
City VARCHAR(100),
Phone VARCHAR(100)
)
CREATE TABLE dbo.Customer
(
CustomerID INT NOT NULL
CONSTRAINT PK_Customer PRIMARY KEY CLUSTERED,
Name VARCHAR(200),
-- other properties
DesignContactID INT
CONSTRAINT FK_Customer_DesignContact
FOREIGN KEY REFERENCES dbo.Contact(ContactID),
SalesContactID INT
CONSTRAINT FK_Customer_SalesContact
FOREIGN KEY REFERENCES dbo.Contact(ContactID),
SupportContactID INT
CONSTRAINT FK_Customer_SupportContact
FOREIGN KEY REFERENCES dbo.Contact(ContactID),
)
Podczas tworzenia klas z bazy danych, widzę to:
- klasa
Customer
ma moje trzyxxxContactId
kolumn dla poszczególnych pól - zgodnie z oczekiwaniami - EF generuje również trzy właściwości nawigacyjne typu
Contact
- ale nazywa jeContact
,Contact1
,Contact2
- uuuuuggghHHHH!
Staram się znaleźć sposób, aby dostać się wokół tych potwornie złych nazwanych właściwości nawigacyjnych ..... są złe, ponieważ:
- ich nie intuicyjne - który z nich punkty, które teraz kontakt ?
- są "stabilne", czy też mogą się zmieniać z czasem, jeśli zostanie wprowadzony czwarty związek z
Contact
? Nie jestem pewien ..... (nie mogę znaleźć żadnych dokumentów na ten temat) - tylko ich nazwy są absolutnie okropne ...... dlaczego nie są nazywane
DesignContact
(w oparciu oDesignContactId
),SalesContact
(na podstawieSalesContactId
) itp.?
W EF 4.1 i do góry mogli dodać szablonów T4 do .edmx
i wpływać na proces generacji - czy to jeszcze możliwe w jakiś sposób z EF6, jeśli robisz „Generowanie kodu najpierw z istniejącej bazy danych” podejście? Nie mogłem już znaleźć żadnego posta na blogu lub artykułu na ten temat .....
Czy istnieje inny sposób wpływania na EF, który generuje klasy - w szczególności na właściwości nawigacji? Czy mogę zdefiniować jakąś niestandardową konwencję lub coś, co wpłynie na to?
@JulieLerman: jakieś przemyślenia na ten (jak _Queen z EF_ :-)?) –
@RowanMiller: wszelkie pomysły lub sztuczki w rękawie, aby sobie z tym poradzić? –
Obowiązuje: http://stackoverflow.com/a/13064383/1207195? (nie głosowanie jako dupek z powodu młota) –