Procedura dettagliata: generazione di tipi F# da un file di schema EDMX (F#)

Questa procedura dettagliata per F# 3,0 viene illustrato come creare tipi di dati rappresentati da Entity Data Model (EDM), lo schema per il quale si è specificato in un file con estensione edmx.In questa procedura dettagliata viene inoltre illustrato come utilizzare il provider del tipo di EdmxFile.Prima di iniziare, considerare se un provider di tipo SqlEntityConnection sia un più opzione appropriata del provider del tipo.Il provider del tipo di SqlEntityConnection è ideale per scenari in cui un database attivo che è possibile connettere durante la fase di sviluppo del progetto e non viene utilizzata per specificare la stringa di connessione in fase di compilazione.Tuttavia, questo provider del tipo viene limitato in quanto non espone l'utilizzo della funzionalità di database al provider del tipo di EdmxFile.Inoltre, se non si dispone di una connessione attiva per un progetto di database che utilizza Entity Data Model, è possibile utilizzare il file .edmx per codificare nel database.Quando si utilizza il provider del tipo di EdmxFile, il compilatore F# esegue EdmGen.exe per generare i tipi che fornisce.

In questa procedura dettagliata vengono illustrate le seguenti attività, da eseguire in quest'ordine per la procedura dettagliata riesca:

  • Creating an EDMX file

  • Creating the project

  • Finding or creating the entity data model connection string

  • Configuring the type provider

  • Querying the data

  • Calling a stored procedure

Creare un file di EDMX

Se è già presente un file di EDMX, è possibile ignorare questo passaggio.

Per creare un file EDMX

  • Se non è già presente un file di EDMX, è possibile seguire le istruzioni in Guida rapida ADO.NET Entity Framework creazione di un Entity Data Model e il file di EDMX per un database.In alternativa, è possibile fare riferimento alle istruzioni al termine di questa procedura dettagliata il passaggio To configure the Entity Data Model.

Creare il progetto

In questo passaggio, creare un progetto e aggiungere i riferimenti appropriati per utilizzare il provider del tipo di EDMX.

Per creare e configurare un progetto F#

  1. Chiudere il progetto precedente, creare un altro progetto e denominarlo SchoolEDM.

  2. In Esplora soluzioni, aprire il menu di scelta rapida per Riferimentiquindi scegliere Aggiungi riferimento.

  3. Nell'area Assembly, selezionare il nodo Framework.

  4. Nell'elenco di assembly disponibili, selezionare gli assembly System.Data.Linq e System.Data.Entity quindi scegliere il pulsante Aggiungi per aggiungere riferimenti ai seguenti assembly per il progetto.

  5. Nell'area Assembly, selezionare il nodo estensioni.

  6. Nell'elenco degli extender disponibili, aggiungere un riferimento all'assembly di FSharp.Data.TypeProviders.

  7. Aggiungere il codice seguente per aprire gli spazi dei nomi appropriati.

    open System.Data.Linq
    open System.Data.Entity
    open Microsoft.FSharp.Data.TypeProviders
    

Ricerca o creando una stringa di connessione per Entity Data Model

La stringa di connessione per Entity Data Model (stringa di connessione di EDMX) non include solo la stringa di connessione per il provider di database ma anche informazioni aggiuntive.Ad esempio, la stringa di connessione di EDMX per un database SQL Server semplice è simile al seguente codice.

let edmConnectionString = "metadata=res://*/;provider=System.Data.SqlClient;Provider Connection String='Server=SERVER\Instance;Initial Catalog=DatabaseName;Integrated Security=SSPI;'"

Per ulteriori informazioni sulle stringhe di connessione di EDMX, vedere Connection Strings.

Per trovare o creare la stringa di connessione per Entity Data Model

  • Le stringhe di connessione EDMX può essere difficile generare manualmente, pertanto è possibile risparmiare tempo generandola a livello di codice.Se si conosce la stringa di connessione di EDMX, è possibile ignorare questo passaggio e utilizzare semplicemente tale stringa al passaggio successivo.In caso contrario, utilizzare il codice seguente per generare la stringa di connessione di EDMX da una stringa di connessione di database specificato.

    open System
    open System.Data
    open System.Data.SqlClient
    open System.Data.EntityClient
    open System.Data.Metadata.Edm
    
    let getEDMConnectionString(dbConnectionString) =
        let dbConnection = new SqlConnection(connectionString)
        let resourceArray = [| "res://*/" |]
        let assemblyList = [| System.Reflection.Assembly.GetCallingAssembly() |]
        let metaData = MetadataWorkspace(resourceArray, assemblyList)
        new EntityConnection(metaData, dbConnection)
    

Configurazione del provider del tipo

In questo passaggio, creare e configurare il provider di tipo alla stringa di connessione di EDMX e generano i tipi per lo schema definito nel file con estensione edmx.

Per configurare il provider del tipo e generare i tipi

  1. Copiare il file con estensione edmx avere generato il primo passaggio di questa procedura dettagliata alla cartella del progetto.

  2. Aprire il menu di scelta rapida del nodo di progetto nel progetto F#, scegliere Aggiungere l'elemento esistentequindi selezionare il file .edmx per aggiungerlo al progetto.

  3. Digitare il seguente codice per attivare il provider del tipo per il file con estensione edmx.serversostituire \istanza con il nome del server che esegue SQL Server e il nome dell'istanza e utilizza il nome del file con estensione edmx dal primo passaggio di questa procedura dettagliata.

    type edmx = EdmxFile<"Model1.edmx", ResolutionFolder = @"<folder that contains your .edmx file>>
    
    let edmConnectionString =
        getEDMConnectionString("Data Source=SERVER\instance;Initial Catalog=School;Integrated Security=true;")
    let context = new edmx.SchoolModel.SchoolEntities(edmConnectionString)
    

Eseguire una query sui dati

In questo passaggio, utilizzare le espressioni di query F# per eseguire una query sul database.

Per eseguire una query sui dati

  • Digitare il codice seguente per eseguire una query sui dati nel modello di dati di entità.

    query { for course in context.Courses do
            select course }
    |> Seq.iter (fun course -> printfn "%s" course.Title)
    
    query { for person in context.Person do
            select person }
    |> Seq.iter (fun person -> printfn "%s %s" person.FirstName person.LastName)
    
    // Add a where clause to filter results
    query { for course in context.Courses do
            where (course.DepartmentID = 1)
            select course)
    |> Seq.iter (fun course -> printfn "%s" course.Title)
    
    // Join two tables
    query { for course in context.Courses do
            join (for dept in context.Departments -> course.DepartmentID = dept.DepartmentID)
            select (course, dept.Name) }
    |> Seq.iter (fun (course, deptName) -> printfn "%s %s" course.Title deptName)
    

Chiamare una stored procedure

È possibile stored procedure utilizzando il provider del tipo di EDMX.Nella procedura riportata di seguito, il database school contiene una stored procedure, UpdatePerson, che aggiorna un record, specificando i nuovi valori delle colonne.È possibile seguire questa stored procedure in quanto esposto come metodo sul tipo di DataContext.

Per chiamare una stored procedure

  • Aggiungere il seguente codice ai record di aggiornamento.

    // Call a stored procedure.
    let nullable value = new System.Nullable<_>(value)
    
    // Assume now that you must correct someone's hire date.
    // Throw an exception if more than one matching person is found.
    let changeHireDate(lastName, firstName, hireDate) =
    
        query { for person in context.People do
                where (person.LastName = lastName &&
                       person.FirstName = firstName)
                exactlyOne }
        |> (fun person ->
                context.UpdatePerson(nullable person.PersonID, person.LastName,
                    person.FirstName, nullable hireDate, person.EnrollmentDate))
    
    changeHireDate("Abercrombie", "Kim", DateTime.Parse("1/12/1998"))
    |> printfn "Result: %d"
    

    Il risultato è 1 se si riesce.Si noti che exactlyOne utilizzato nell'espressione di query per garantire che un solo risultato sia restituito, in caso contrario, viene generata un'eccezione.Inoltre, l'utilizzo di valori NULL più facilmente, è possibile utilizzare la funzione semplice nullable definita nel codice seguente per creare un valore NULL da un valore comune.

Configurazione di Entity Data Model

È consigliabile completare questa procedura solo se si desidera sapere generare Entity Data Model completo da un database e non si dispone di un database con cui il test.

Per configurare Entity Data Model

  1. Sulla barra dei menu, scegliere SQL, Editor Transact-SQL, Nuova query per creare un database.Se necessario, specificare il server di database e di istanza.

  2. Copiare e incollare il contenuto dello script di database che crea il database student, come descritto Creating the School Sample Database.

    I passaggi successivi di questa procedura dettagliata sono basati su ADO.NET Entity Data Model Quickstart.

  3. Eseguire lo script SQL scegliendo il pulsante della barra degli strumenti con il simbolo di triangolo o scegliendo Ctrl+Q le chiavi.

  4. In Esplora server, aprire il menu di scelta rapida per connessioni dati, scegliere Aggiungere la connessionequindi immettere il nome del server database, il nome dell'istanza e il database school.

  5. Creare un progetto di applicazione console di Visual Basic o C#, aprire il menu di scelta rapida, scegliere Aggiungi nuovo elementoquindi scegliere ADO.NET Entity Data Model.

    Verrà aperta la Procedura guidata Entity Data Model.Utilizzare questa procedura guidata, è possibile scegliere la modalità di creazione di un Entity Data Model.

  6. In Selezionare l'indice di modello, selezionare la casella di controllo Generazione di database.

  7. Nella pagina, scegliere il database appena creato school come connessione dati.

    Questa connessione deve essere simile a <servername>.<instancename>.School.dbo.

  8. Copiare la stringa di connessione di entità negli Appunti perché tale stringa può essere successivamente importante.

  9. Assicurarsi che la casella di controllo per salvare la stringa di connessione di entità al file App.Config sia selezionata e prendere nota del valore stringa nella casella di testo, che dovrebbe di individuare più avanti la stringa di connessione, se necessario.

  10. In pagechoose seguente Tabelle e stored procedure e funzioni.

    Scegliendo questi nodi di primo livello, si sceglie tutte le tabelle, stored procedure e funzioni.È inoltre possibile selezionare individualmente questi, se lo si desidera.

  11. Verificare che le caselle di controllo per le altre impostazioni siano selezionate.

    La prima casella di controllo Pluralizzi o singolari i nomi oggetto generati indica se modifica delle forme singolari a plurale per soddisfare le convenzioni di denominazione gli oggetti che rappresentano le tabelle di database.La casella di controllo Importare le colonne di chiave esterna nel modello determina se includere i campi per il quale lo scopo di unirsi ad altri campi nei tipi di oggetti generati per lo schema di database.La terza casella di controllo indica se includere stored procedure e funzioni del modello.

  12. Selezionare il pulsante - Fine per generare un file con estensione edmx contenente un Entity Data Model basato sul database school.

    Un file, Model1.edmx, viene aggiunto al progetto e un diagramma di database.

  13. Sulla barra dei menu, scegliere Visualizza, Altre finestre, Browser Entity Data Model per visualizzare i dettagli del modello o Entity Data Model per il mapping dei dettagli per aprire una finestra che mostra come modello a oggetti generato esegue il mapping alle tabelle di database e colonne.

Passaggi successivi

Esplorare altri query esaminando gli operatori di query disponibili come indicato in Espressioni di query (F#).

Vedere anche

Attività

Procedura dettagliata: accesso a un database SQL tramite entità e provider di tipi (F#)

Riferimenti

Provider di tipo EdmxFile (F#)

Altre risorse

Provider di tipi

ADO.NET Entity Framework

.edmx File Overview (Entity Framework)

Edm Generator (EdmGen.exe)