Udostępnij za pośrednictwem


Instruktaż: Generowanie F# typów z pliku schematu EDMX (F#)

W tym instruktażu dla wersji 3.0 języka F# pokazano, jak utworzyć typy danych, które są reprezentowane przez Entity Data Model (EDM), schemat którego jest określony w pliku .edmx.Instruktaż ten pokazuje również sposobu użycia dostawcy typu EdmxFile.Przed rozpoczęciem należy rozważyć, czy dostawca typu SqlEntityConnection jest najodpowiedniejszym dostawcą typów.Dostawca typu SqlEntityConnection działa najlepiej w scenariuszach, w których znajduje się aktywna bazy danych, z którą można łączyć się podczas fazy opracowywania projektu, i nie trzeba pamiętać o parametrach połączenia w czasie kompilacji.Jednak ten dostawca typów jest również ograniczony, gdyż nie udostępnia tak wielu funkcji bazy danych jak dostawca typu EdmxFile.Ponadto jeśli nie posiadasz aktywnego połączenia z bazą danych dla projektu używającego Entity Data Model, do operacji na bazie możesz używać pliku .edmx.Użycie dostawcy typu EdmxFile powoduje, że kompilator F# uruchamia EdmGen.exe do generowania typów, które są dostarczane.

W tym instruktażu przedstawiono czynności, które należy wykonać, aby instruktaż powiódł się.

  • Tworzenie pliku EDMX

  • Tworzenie projektu

  • Znajdowanie lub tworzenie parametrów połączenia dla Entity Data Model

  • Konfigurowanie dostawcy typów

  • Wykonywanie zapytania na danych

  • Wywołanie procedury przechowywanej

Tworzenie pliku EDMX

Jeśli masz już plik EDMX, możesz pominąć ten krok.

Aby utworzyć plik EDMX

  • Jeśli jeszcze nie masz pliku EDMX, możesz wykonać instrukcje zawarte w Szybki start z ADO.NET Entity Framework w celu utworzenia Entity Data Model i pliku EDMX dla bazy danych.Możesz również odnieść się do instrukcji zawartej na końcu tego instruktażu w kroku Konfigurowanie Entity Data Model.

Tworzenie projektu

W tym kroku tworzysz projekt i dodajesz odpowiednie odwołania do niego w celu użycia dostawcy typu EDMX.

Aby utworzyć i skonfigurować projekt F#

  1. Zamknij wszystkie poprzednie projekty i utwórz nowy projekt o nazwie SchoolEDM.

  2. W oknie Eksploratora rozwiązań otwórz menu skrótów Odwołania, a następnie wybierz polecenie Dodaj odwołanie.

  3. W obszarze Zestawy wybierz węzeł Platforma.

  4. Z listy dostępnych zestawów wybierz zestawy System.Data.Entity i System.Data.Linq, a następnie naciśnij przycisk Dodaj, aby dodać odwołania do tych zestawów do projektu.

  5. W obszarze Zestawy wybierz węzeł Rozszerzenia.

  6. Do listy dostępnych rozszerzeń dodaj odwołanie do zestawu FSharp.Data.TypeProviders.

  7. Dodaj poniższy kod, aby otworzyć odpowiednie przestrzenie nazw.

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

Znajdowanie lub tworzenie parametrów połączenia dla Entity Data Model

Parametry połączenia dla Entity Data Model (parametry połączenia EDMX) zawierają nie tylko parametry połączenia dla dostawcy bazy danych, ale również dodatkowe informacje.Na przykład parametry połączenia EDMX dla prostej bazy danych SQL Server przypominają następujący kod.

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

Aby uzyskać więcej informacji na temat parametrów połączenia EDMX, zobacz Connection Strings.

Aby znaleźć lub utworzyć parametry połączenia dla Entity Data Model

  • Parametry połączenia EDMX mogą być trudne do ręcznego wygenerowania, więc można zaoszczędzić czas przez generowanie ich przez program.Jeśli znasz parametry połączenia EDMX, możesz pominąć ten krok i po prostu użyć tych parametrów w następnym kroku.Jeśli nie, należy użyć następującego kodu do wygenerowania parametrów połączenia EDMX z parametrów połączenia bazy danych.

    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)
    

Konfigurowanie dostawcy typów

W tym kroku utworzysz i skonfigurujesz dostawcę typów ciągu połączenia EDMX i wygenerujesz typy dla schematu, który jest zdefiniowany w pliku .edmx.

Aby skonfigurować dostawcę typ i wygenerować typy

  1. Skopiuj plik .edmx, który został wygenerowany w pierwszym kroku w tym instruktażu do folderu projektu.

  2. Otwórz menu skrótów dla węzła projektu w projekcie F# i wybierz Dodaj istniejący element, a następnie wybierz plik .edmx do dodania do projektu.

  3. Wprowadź następujący kod aktywacji dostawcy typów dla pliku .edmx.Zamień Serwer\Wystąpienie z nazwą serwera SQL Server i nazwą wystąpienia, a następnie użyj nazwy pliku .edmx z pierwszego kroku tego instruktażu.

    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)
    

Wykonywanie zapytania na danych

W tym kroku użyjesz zapytania F# w celu wysłania zapytania do bazy danych.

Aby utworzyć zapytanie do danych

  • Wprowadź następujący kod w celu wysłania zapytania do danych w Entity Data Model

    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)
    

Wywołanie procedury przechowywanej

Za pomocą dostawcy typu EDMX można wywołać przechowywaną procedurę.W poniższej procedurze baza danych School zawiera przechowywaną procedurę UpdatePerson, która aktualizuje rekord do nowych wartości w kolumnach.Można użyć tej przechowywanej procedury, ponieważ jest on uwidoczniona jako metoda w typie DataContext.

Aby wywołać procedurę przechowywaną

  • Dodaj następujący kod do aktualizacji rekordów.

    // 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"
    

    W przypadku pomyślnego wywołania wynik wyniesie 1.Warto zauważyć, że exactlyOne jest używana w zapytaniu do zapewnienia, że zwracany jest tylko jeden wynik; w przeciwnym wypadku zgłaszany jest wyjątek.Aby pracować z wartościami, które mogą przyjmować wartość null, można użyć funkcji nullable, która jest zdefiniowana w tym kodzie w celu utworzenia wartości mogącej przyjmować wartość null ze zwykłej wartości.

Konfigurowanie Entity Data Model

Należy wykonać tę procedurę tylko wtedy, gdy użytkownik chce wiedzieć jak wygenerować pełny Entity Data Model z bazy danych nie posiadając bazy danych do testowania.

Aby skonfigurować Entity Data Model

  1. Z paska menu wybierz SQL, Edytora języka Transact-SQL, Nowe zapytanie w celu utworzenia bazy danych.Jeśli zostanie wyświetlony monit, określ serwer bazy danych i wystąpienie.

  2. Skopiuj i wklej zawartość skrypt bazy danych, który tworzy bazę Student, jak zostało to opisane w Creating the School Sample Database.

    Kolejne kroki w tym instruktażu są oparte na ADO.NET Entity Data Model Quickstart.

  3. Uruchom skrypt SQL wybierając przycisk paska narzędzi z symbolem trójkąta lub naciskając klawisze Ctrl+Q.

  4. W oknie Eksploratora serwera otwórz menu skrótów i kliknij Połączenia danych, wybierz Dodawanie połączenia, a następnie wprowadź nazwę serwera bazy danych, nazwę wystąpienia i bazę danych School.

  5. Utwórz projekt C# projekt aplikacji konsolowej Visual Basic, otwórz menu skrótów, wybierz Dodaj nowy element, a następnie wybierz ADO.NET Entity Data Model.

    Zostanie otwarty kreator Entity Data ModelZa pomocą tego kreatora można wybrać sposób tworzenia Entity Data Model.

  6. W obszarze Wybierz zawartość modelu zaznacz pole wyboru Generowanie z bazy danych.

  7. Na następnej stronie wybierz nowo utworzoną bazę danych School jako połączenia danych.

    Połączenie to powinno przypominać <servername>.<instancename>.School.dbo.

  8. Skopiuj parametry połączenia encji, gdyż parametry te mogą okazać się później ważne.

  9. Należy zaznaczyć pole wyboru zapisu parametrów połączenia encji do pliku App.Config i zanotować wartość parametrów połączenia w polu tekstowym, co pomoże później zlokalizować parametry połączenia, jeśli te okażą się potrzebne.

  10. Na następnej stronie należy wybrać Tabele i Przechowywane procedury i funkcje.

    Wybierając te węzły najwyższego poziomu wybierz wszystkie tabele i przechowywane procedury i funkcje.Można je także wybrać indywidualnie.

  11. Należy zaznaczyć też pola wyboru dla innych ustawień.

    Pierwsze pole wyboru Dodawanie końcówek liczby pojedynczej lub mnogiej dla wygenerowanych obiektów określa czy należy zmienić formę nazwy tabel bazy danych na końcówkę liczby mnogiej, w celu dopasowania do konwencji nazewnictwa.Pole wyboru Dołącz kolumny klucza obcego w modelu określa, czy należy dołączyć pola, których celem jest połączenia z innymi polami w typach obiektu wygenerowanych ze schematu bazy danych.Trzecie pole wyboru wskazuje, czy uwzględnić przechowywane procedury i funkcje w modelu.

  12. Naciśnij przycisk Zakończ, aby wygenerować plik .edmx, który zawiera Entity Data Model oparty na bazie danych School.

    Plik Model1.edmx jest dodawany do projektu i pojawi się diagram bazy danych.

  13. Na pasku menu wybierz Widok, Inne okna, Przeglądarka Entity Data Model aby wyświetlić wszystkie szczegóły dotyczące modelu lub Szczegóły mapowania Entity Data Model w celu otworzenia okna pokazującego sposób mapowania wygenerowanego modelu obiektowego na tabele i kolumny bazy danych.

Następne kroki

Zapoznaj się z innymi zapytaniami przeglądając listę dostępnych operatorów zapytań znajdującą się w Wyrażenia w kwerendzie (F#).

Zobacz też

Zadania

Instruktaż: Dostęp do bazy danych SQL za pomocą typu dostawcy oraz podmioty (F#)

Informacje

Dostawca typu EdmxFile (F#)

Inne zasoby

Typ dostawcy

ADO.NET Entity Framework

.edmx File Overview (Entity Framework)

Edm Generator (EdmGen.exe)