11

Sto avviando una nuova applicazione che deve utilizzare un database esistente che utilizza alcune convenzioni di denominazione che sono davvero fastidiose in .net (i nomi delle tabelle iniziano con diversi trigram che specificano il dominio aziendale del tabella, i nomi delle colonne iniziano con il trame delle tabelle, i trigrammi sono in maiuscolo e separati da caratteri di sottolineatura, ecc.,).Modifica entità e nomi proprietà in Database First

Quello che mi piacerebbe fare è scrivere una semplice regola di rinomina (questo è semplice come trovare l'ultimo trattino basso e prendere tutto dopo) e applicarlo in Entity Framework. Non voglio davvero modificare i nomi uno per uno nell'editor, soprattutto perché il database potrebbe cambiare e non voglio farlo più volte.

Sto utilizzando Database First (poiché il database esiste già ed è "il master") e EF 4.x DbContext Generator e funziona davvero bene fuori dagli schemi (con classi e proprietà mal denominati) .

Ho modificato i modelli T4 per rinominare le entità e le proprietà generate, ma quando provo a eseguire qualsiasi richiesta, l'oggetto DbContext non riesce a trovare la tabella che corrisponde all'entità che sto cercando di richiedere e io ottieni questa eccezione:

Il tipo di entità [Nome entità] non fa parte del modello per il contesto corrente .

Questo è ovvio perché non trova la tabella: niente gli dice come abbinare il nome dell'entità e la tabella come ho cambiato al volo. Ho letto che posso aggiungere istruzioni nel metodo OnModelCreating(DbModelBuilder modelBuilder) ma questo non è usato nel Database First (e il template T4 predefinito aggiunge un'eccezione in esso, per ogni evenienza).

Così ora sono bloccato, non so come specificare quella corrispondenza.

Qui ci sono diverse idee che ho, ma non so se è corretto o fattibile:

  • Utilizzando l'API "plurale/singolare" per cambiare il nome del soggetto? Sembra una soluzione sporca. Ma potrebbe funzionare (non ho provato però).
  • Trovare un modo per modificare il file EDMX al volo.
  • Modificare EDMX in seguito, ma potrebbe complicare il processo (modifica nella finestra di progettazione, quindi eseguire uno strumento per modificare EDMX, quindi eseguire lo strumento personalizzato per rigenerare entità e DbContext ... mentre oggi devo solo modificare nella finestra di progettazione).
  • Utilizzo del codice (come sembra più facile utilizzare nomi di entità diversi rispetto ai nomi di tabelle, tramite attributi o istruzioni nella classe DbContext), ma sembra che non sarebbe più complicato utilizzarlo con un database esistente.

Qualche idea? O mi sono perso qualcosa?

risposta

7

Non sarà possibile utilizzare una trasformazione T4 per questo, poiché si desidera modificare il contenuto del file .edmx effettivo per mappare i nomi delle entità del negozio (con i prefissi odiosi) ai nomi delle entità concettuali igienizzati.

Invece, è meglio scrivere un'applicazione che accetta un file .edmx come input e disinfetta i nomi sotto il tag concettuale del modello e modifica i nomi di mappatura per riflettere i nomi sterilizzati. Capisco che questa è la tua terza opzione e che volevi evitare questo, se possibile, ma questo è il modo più diretto per farlo.Ricorda che dovrai solo eseguire questo strumento quando aggiungi nuove tabelle o colonne.

+2

Avevo paura di ottenere quella risposta :). Speravo di essermi perso qualcosa. Sembra che qualcuno abbia già fatto questo strumento: http://blog.cincura.net/228749-making-names-of-entities-or-any-identifiers-in-entity-framework-model-code-and-developer-friendly -non-maiuscole / –

Problemi correlati