2012-04-19 11 views

risposta

7

ci sono tutorial che spiegherebbe l'API Fluent insieme Database- Primo approccio perché l'API Fluent è fatta solo per l'approccio Code-First. Non hai bisogno dell'API Fluent se vuoi creare il tuo modello tramite Database-First.

API fluente (insieme a annotazioni e convenzioni di dati Code-First) è uno strumento per definire i dettagli del modello nel codice, come la lunghezza della stringa, se è richiesta una proprietà o il tipo di relazione: molti-a-molti, uno -to-many, ecc. Quando si utilizza Database-First o Model-First il file EDMX ha lo stesso scopo: contiene tutti i dettagli e le definizioni di mapping del modello. L'API Fluent (+ annotazioni e convenzioni di dati) sostituisce il file EDMX solo quando si utilizza Code-First.

Se si crea il modello tramite Database-First o Model-First, si avrà un file EDMX che rappresenta il modello. È possibile applicare T4 DbContext Generator a questo file EDMX. I file generati hanno due caratteristiche essendo differente da Codice-Primo:

  • La stringa di connessione generata contiene una riferendosi sezione per i metadati EDMX che sarà integrato nella vostra assemblea:

    connectionString="metadata=res://*/Model.csdl 
              |res://*/Model.ssdl 
              |res://*/Model.msl; 
            ..." 
    
  • Il generato contesto DbContext avrà un OnModelCreating metodo ignorato che ha appena genera un'eccezione:

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
        throw new UnintentionalCodeFirstException(); 
    } 
    

Fintanto che si lascia la sezione dei metadati nella stringa di connessione, EF non chiamerà nemmeno OnModelCreating o alcun codice in Fluent API in questo metodo. La sezione dei metadati indica a EF che il modello è DB o Model-First e che i metadati sono definiti nell'EDMX incorporato e non nell'API Fluent.

Tuttavia, è possibile rimuovere la sezione dei metadati dalla stringa di connessione, rimuovere UnintentionalCodeFirstException e scrivere il codice con Fluent API in OnModelCreating. È possibile seguire questa procedura per creare un modello iniziale tramite Database-First e quindi costruire su questo modello iniziale per ulteriori sviluppi con Code-First.

A questo punto non si lavora più con Database-First, ma Code-First e tutto ciò che leggi su Fluent API è valido per te.

+2

Contrassegnerò il tuo post come risposta in un giorno o due dato che hai già risposto alla mia domanda originale, ma se trovi il tempo - attualmente sto imparando su DBContext e la sua API di convalida. Ad ogni modo, presumo che l'API di validazione possa essere utilizzata anche con Database-First, anche se Database-First non utilizza Fluent-API? – user702769

+1

@ user702769: Hm, bella domanda ... Davvero non lo so. Non ho mai usato la funzione di convalida con database-first. Forse fai una nuova domanda al riguardo. – Slauma

+0

lo farà. Grazie mille per il tuo aiuto – user702769

1

C'è un post interessante su come realizzare alcuni degli obiettivi "Database-First" senza utilizzare la vera metodologia "Database-First" di per sé.

http://agilenet.wordpress.com/2011/04/11/entity-framework-4-1-rc-with-an-existing-database/

L'autore usa “Codice-First” e “API Fluent”, ma disabilita la generazione automatica e la semina di database e tabelle.

Condivide un esempio che mostra "come creare un modello di entità, quindi creare manualmente il database e quindi associare tali entità al database. Infine mostra come usare DatabaseContext per salvare e recuperare entità ".

La parte in cui viene creata una "classe di configurazione per ciascuna entità che esegue il mapping tra l'entità e il database" è piuttosto interessante. Questo passaggio sostituisce i file "edmx" che verrebbero generati quando si impiega un approccio formale "Database-First".