Condividi tramite


Il presente articolo è stato tradotto automaticamente.

Concetti sui dati

Demistificazione delle strategie di Entity Framework: flusso di lavoro di creazione dei modelli

Julie Lerman

Julie LermanCome tecnologia di accesso ai dati progettata per soddisfare le esigenze di un'ampia gamma di stili di sviluppo, Microsoft Entity Framework costituisce per gli sviluppatori di molte opzioni.Alcune di queste scelte è necessario apportare all'inizio del ciclo di sviluppo e si avrà un impatto sulle opzioni che è possibile ulteriore lungo il processo di sviluppo. Nei miei articoli successivi tre fornirò fornite indicazioni utili per alcune delle decisioni più importanti, che sarà necessario apportare con Entity Framework:

  • In primo luogo, il codice prima di modello o il primo Database flussi di lavoro per la creazione di un modello concettuale
  • Caricamento lazy, esplicito o non differito
  • Normali vecchi oggetti c# (POCOs) o EntityObjects
  • LINQ a entità o entità SQL

Esistono molte ulteriori decisioni di progettazione deve essere effettuato in tutta l'applicazione, ma queste domande sono più frequenti e spesso opinabile, dagli sviluppatori quando iniziano a implementare Entity Framework in applicazioni nuove o esistenti.

Verrà attaccare il workflow di creazione di modello concettuale e coprire gli altri tre argomenti nelle due colonne. Lo scopo è fornire una panoramica generale.

Tre opzioni per la creazione di un modello concettuale

Entity Framework si basa su un modello concettuale le entità di dominio, denominato un Entity Data Model (EDM), e la scelta di come creare tale modello è la prima decisione che sarà necessario apportare. Sono disponibili tre flussi di lavoro separati per scegliere tra:

  • Il Database primo flusso di lavoro inizia con un database legacy e si avvale di una procedura guidata per la decodifica del database in un modello concettuale.
  • Il primo modello flusso di lavoro inizia con una sorta di lavagna vuota. È possibile utilizzare la finestra di progettazione visiva EDM per progettare un EDM quindi generare lo schema del database da quel modello.
  • Il flusso di lavoro prima di codice inizia con le classi che descrivono il modello concettuale. Non è disponibile alcun modello visual utilizzato con il primo codice.

Database First: Start with a Legacy Database

Nella prima iterazione di Entity Framework, abbiamo avuto tutte le opzioni indicate. L'unico modo per creare un modello è stato quello di decodificare un database esistente in un modello EDM, cui ci riferiamo come primo Database modeling (vedere Figura 1).

With Database First, You Reverse-Engineer a Model from a Legacy Database

Figura 1 con del Database in primo luogo, Reverse-Engineering un modello da un Database Legacy

Si sarà notato che questo illustrato più volte, in realtà. Si apre la procedura guidata EDM, scegliere un database esistente, selezionare quali tabelle, viste, stored procedure e funzioni definite dall'utente che si desidera essere rappresentati nel modello e fare clic sul pulsante Fine. Immediatamente, è nata un modello. Il primo Database modello inizia la vita, riflesso virtuale del database oppure tale sottoinsieme del database selezionato. Con non più complessa, gli sviluppatori già beneficerà Entity Framework. È possibile scrivere query fortemente tipizzata in base a questo modello ed Entity Framework verranno eseguire le interrogazioni per voi e materializzazione di oggetti fortemente tipizzati dai risultati. Quindi, mentre si lavora con i risultati, Entity Framework tenere traccia delle modifiche e consente di mantenerli semplicemente chiamando il relativo comando SaveChanges al database.

Che sta per essere alcuni sviluppatori sufficiente da Entity Framework, ma loro sta non uno dei principali vantaggi della presenza di modello, vale a dire che è possibile renderla più simile al dominio, ovvero le classi e le relazioni che definiscono l'applicazione, ovvero a quelle del databasee quindi non è necessario preoccuparsi di come ottenere da backup presenti nel database (che Entity Framework continuerà a essere la liberazione di si). Personalizzazione dei modelli è una funzionalità fondamentale di EDM che molti sviluppatori trascurare e non traggono vantaggio da. È possibile introdurre il modello di gerarchie di ereditarietà, modificare la forma di entità, combinare e Dividi entità e molto altro ancora.

 With Database First, you can have the best of both of these worlds: leverage the existing database to get a huge head start with creating your model, then customize that model to better reflect your application domain.

Model First: Start with a Visual Model

Non sono sempre un database legacy iniziale. Modello consente innanzitutto di progettare il modello direttamente nella finestra di progettazione e creare lo schema del database in base al modello. È possibile creare le entità e le relative proprietà, definire le relazioni e i vincoli e creare destra gerarchie di ereditarietà nella finestra di progettazione. È possibile specificare quali proprietà diventerà chiavi di identità e anche se il database deve essere responsabile per la generazione di loro valori (vedere Figura 2).

With Model First, You Design a Model that’s Used to Generate Database Schema

Figura 2 con modello si Design in primo luogo, un modello che viene utilizzato per generare lo Schema del Database

La finestra di progettazione di EDM funzione "Creare dal modello di Database" effettivamente non crea un database. Lo farà è la generazione SQL che, quando viene eseguito, definisce lo schema di un database. Questo SQL viene definito come linguaggio di definizione dei dati o DDL.

Esistono alcuni aspetti non ovvi essere a conoscenza. Modello è stato introdotto in Visual Studio 2010 e Microsoft.NET Framework 4. L'opzione Create Database non disponibile in Visual Studio 2008. Inoltre, poiché si tratta di una nuova funzionalità, è necessario assicurarsi che il provider ADO.NET OLE DB in uso (ad esempio, System.Data.Sql) è stato aggiornato per fornire tale capacità. Il provider Microsoft SQL Server è stato aggiornato per la.NET 4 rilascio; Alcuni provider di terze parti sono stati aggiornati.

Un comportamento da preparare per è che il primo modello non, per impostazione predefinita, eseguire aggiornamenti incrementali schema nel database. Quando si esegue la funzionalità, creerà un script DDL completamente nuovo che verrà rimosso e quindi ricreare tutti gli oggetti di database. Strumenti esterni sono a vostra disposizione per modificare lo schema del database piuttosto sovrascriverlo. In caso contrario si desidera eseguire il backup dei dati in anticipo o scrivere uno script per rigenerare i dati del test ogni volta che si desidera modificare il modello e ricreare lo schema del database.

Visual Studio fornisce un punto di estensibilità della generazione di database, è possibile sfruttare con l'aiuto dell'entità progettazione Database generazione Power Pack di Microsoft. È possibile scaricarlo dal Visual Studio 2010 Extension Manager o da visualstudiogallery.com. Questa estensione consente non solo in modo è possibile apportare incrementale modifiche al database con il primo modello, ma offre inoltre è la possibilità di modificare il mapping di ereditarietà predefinita per ogni gerarchia delle tabelle e persino creare proprie regole di generazione DDL personalizzati.

Code First: Start with Code and Forego a Physical Model

Con il primo Database e il primo modello, ottiene una rappresentazione fisica dell'EDM con metadati aggiuntivi. Il formato raw di questo modello è XML. Viene memorizzato in un file con estensione. EDMX, e può utilizzare la finestra di progettazione di EDM o XML non elaborato. In fase di esecuzione, le letture di Entity Framework di XML e crea una rappresentazione in memoria del modello utilizzando le classi specializzate che rappresentano i metadati, ovvero le entità, relazioni e così via. Entity Framework Common Language runtime utilizza tali oggetti, non il file XML effettivo. Questi metadati sono particolarmente importanti quando Entity Framework è necessario trasformare le query di modello in query di database, i risultati del database in istanze di entità e creare i comandi di database per inserimenti, aggiornamenti ed eliminazioni. Visual Studio vengono generate le classi di dominio del file XML da utilizzare nell'applicazione.

Il team di Entity Framework è stato attivato un modo per creare gli oggetti necessari metadati in fase di esecuzione senza la necessità di disporre di un file fisico di EDMX. Questa è la potenza alla base del flusso di lavoro creazione del modello di terzo per Entity Framework, denominato primo codice. Con il codice in primo luogo, anziché creare un EDM è creare classi di dominio come si farebbe per qualsiasi altro.NET development. In fase di esecuzione, Entity Framework verrà analizzare tali classi e, utilizzando un insieme di convenzioni predefiniti, creare un modello in memoria in Entity Framework Common Language runtime è in grado di funzionare con. Poiché le classi non sempre Naturalmente fornire le informazioni che Entity Framework è necessario creare tale modello, è possibile fornire ulteriore configurazione (utilizzo delle annotazioni di dati/attributi dichiarativi o nel codice utilizzando un'API intuitiva) per descrivere ulteriormente il modello, si esegue l'override delle convenzioni menzionate in precedenza. È possibile utilizzare la configurazione per una vasta gamma di attività del modello, dall'identificazione di chiavi primarie che non corrispondono a quelli del primo codice convenzioni per le relazioni Fine-Tuning o anche specificare la modalità di rappresentazione di una gerarchia di ereditarietà.

Come il primo modello di codice prima la presunzione che non vengono avviati con un database legacy per impostazione predefinita e offre la possibilità di creare il database dal modello derivato. A differenza del primo modello, è possibile creare il file di database, nonché lo schema. Con il primo codice mancano ancora un modo per rendere persistenti i dati del database se si modifica il modello e rigenerare il database. Tuttavia, prima del codice dispone del supporto per rilevare le differenze di modello e il database, nonché il seeding del database con i dati utilizzando gli inizializzatori di database.

È possibile anche utilizzare il primo codice con un database esistente. Se i nomi di classe e la proprietà non corrispondono al database, è possibile aggiungere annotazioni di dati o di configurazione tramite l'API di Microsoft Office fluent per superare che. Figura 3 viene illustrata una classe con attributi che costringerà il primo codice di fornire mapping con i nomi di tabella e la proprietà corretti, anche se la classe e i campi non corrispondono esattamente.

Figura 3 una classe con attributi di codice primi di garantire la classe possibile mappare correttamente a una tabella esistente

[Table("SalesOrderDetail", SchemaName="SalesLT")]
  public partial class Detail
  {
    // Scalar properties

    [Column(Name = "SalesOrderID")]
    public int OrderId { get; set; }
    [Column(Name = "SalesOrderDetailID")]
    public int DetailId { get; set; }
    public short OrderQty { get; set; }
    public int ProductId { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal UnitPriceDiscount { get; set; }

    public decimal LineTotal { get; set; }
    public System.DateTime ModifiedDate { get; set; }

    // Navigation properties

    public virtual Product Product { get; set; }
    public virtual Order Order { get; set; }
  }

Una struttura decisionale

Entity Framework si è evoluto per supportare un'ampia gamma di stili di sviluppo, ma questo impone ora con noi per acquisire familiarità con le opzioni per scegliere l'approccio corretto. Se lo si desidera utilizzare un'interfaccia utente per il modello, quindi si dispone nella finestra di progettazione di EDM disponibile a partire da un database esistente o utilizzando l'opzione primo modello. È inoltre è possibile utilizzare comunque il modeler per rendere partecipi al suolo e quindi utilizzare un modello per creare classi di primo codice e rilasciare il modello visual. Se siete interamente circa il codice e preferiscono non essere legati a un file EDMX o il modellatore visual, primo codice farà appello a voi (vedere Figura 4).

The Decision Tree

Figura 4 l'albero di decisione

Avvio nel modo corretto

Indipendentemente dalla tecnica di modellazione si sceglie, ovvero il primo Database, il primo modello o codice prima, dopo avere creato un modello, non si noterà alcuna differenza quando si inizia a eseguire una query, interagire e rendere persistenti le entità utilizzando il runtime di Entity Framework di classi del modello. Ed è possibile iniziare con un flusso di lavoro e passa a un altro. È possibile creare classi di primo codice da un EDMX utilizzando il modello di generazione del codice DbContext. E, anche se non è abbastanza semplice, è inoltre possibile creare un EDMX dalle classi primo codice.

Ho fornito una panoramica delle scelte e cosa potrebbe unità è possibile scegliere una rispetto a altra e si spera ho spiegazione alcune delle opzioni per l'utente.

In futuro le colonne, verrà discusso altre decisioni di grandi dimensioni è necessario affrontare nelle applicazioni Entity Framework, che è stato ricordato all'inizio di questa colonna: scelta di una strategia di generazione del codice per EntityObjects o POCOs, il caricamento relativi a dati mediante il caricamento non differito, lazy o esplicitoe la scrittura di query con LINQ to SQL di entità o entità.

Julie Lerman è un Microsoft MVP, mentore e consulente .NET che risiede nel Vermont. È possibile trovare le sue presentazioni all'accesso relativo ai dati e altri argomenti su Microsoft.NET in occasioni di conferenze si tengono in tutto il mondo. Blog di lei a /blog ed è autore del libro altamente acclamato, "Programming Entity Framework" (o ' Reilly Media, 2010). Lei seguire su Twitter a twitter.com/julielerman.

Grazie all'esperto tecnica seguente per la revisione di questo articolo: Tim Laverty