Abbiamo utilizzato EF 4.0 con un approccio basato sul database utilizzando un modello .edmx
.Influenza del modo in cui le classi di entità vengono create in codice EF 6 dal database
Stiamo eseguendo l'aggiornamento a EF 6.1.3 e stiamo esaminando se utilizzare o meno il modello .edmx
. Sicuramente vogliamo ancora avere il controllo del nostro schema di database, quindi creeremo nuove tabelle ecc. Con lo script SQL e quindi genereremo il modello EF (o .edmx
o solo classi di codice) dal database esistente.
Durante le prove con Visual Studio 2013, ho notato un punto fastidioso quando EF 6 crea le classi dal database esistente. Ho una classe Customer
che si collega a una classe Contact
tre volte: una per lo DesignContact
, una per lo SalesContact
e una terza volta per lo SupportContact
. Queste sono memorizzate come colonne DesignContactId (INT)
ecc. Nella tabella Customer
.
È possibile creare le classi di utilizzo di questo 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),
)
Quando si creano le classi dal database, vedo questo:
- classe
Customer
ha i miei trexxxContactId
colonne come campi - è come previsto - EF genera anche tre proprietà di navigazione di tipo
Contact
- ma le chiamaContact
,Contact1
,Contact2
- uuuuuggghHHHH!
Sto cercando di trovare un modo per aggirare quei terribilmente cattive caratteristiche di navigazione di nome ..... questi sono cattivi perché:
- loro non intuitivi - punti quali uno per cui il contatto ora ?
- sono "stabili" o potrebbero cambiare nel tempo se viene introdotta una quarta relazione con
Contact
? Non è sicuro ..... (non può trovare nessuna documentazione su questo) - solo i loro nomi sono assolutamente orribile ...... perché non si chiamano
DesignContact
(sulla base diDesignContactId
),SalesContact
(sulla base degliSalesContactId
) eccetera.?
In EF 4.1 in su, sono stati in grado di aggiungere modelli T4 al .edmx
e influenzare il processo di generazione - è che ancora possibile in qualche modo con EF6, se si sta facendo "Genera codice prima dal database esistente" approccio? Non sono riuscito a trovare più post o articolo su questo argomento .....
Oppure c'è un altro modo per influenzare il modo in cui EF genera le classi, in particolare le proprietà di navigazione? Posso definire qualche tipo di convenzione personalizzata o qualcosa per influenzare questo?
@JulieLerman: qualche idea su questo (come il _Queen di EF_ :-)?) –
@RowanMiller: idee o trucchi per gestirlo? –
Applicabile: http://stackoverflow.com/a/13064383/1207195? (non votando come duplicato a causa del martello) –