Udostępnij za pośrednictwem


Wskazówki: generowanie typów F# za pomocą pliku schematu EDMX (F#)

W tym przewodniku dotyczącym języka F# 3.0 pokazano, jak tworzyć typy danych reprezentowane przez model Entity Data Model (EDM), którego schemat jest określony w pliku edmx.W tym przewodniku pokazano również sposób użycia dostawcy typów EdmxFile.Przed rozpoczęciem należy zastanowić się, czy nie będzie lepiej używać dostawcy typów SqlEntityConnection.Dostawca typów SqlEntityConnection sprawdza się najlepiej w scenariuszach obejmujących aktywną bazę danych, z którą można łączyć się podczas fazy opracowywania projektu i nie trzeba pamiętać o określaniu parametrów połączenia w czasie kompilacji.Jednak ten dostawca typów ma również ograniczenia, ponieważ nie uwidacznia tak wielu funkcji bazy danych, jak dostawca typów EdmxFile.Ponadto jeśli dla projektu, w którym jest używany model Entity Data Model, nie jest używane aktywne połączenie z bazą danych, do tworzenia kodu operacji wykonywanych w bazie danych można używać pliku edmx.Użycie dostawcy typów EdmxFile powoduje, że kompilator języka F# uruchamia program EdmGen.exe w celu wygenerowania dostarczanych przez siebie typów.

W tym przewodniku opisano następujące zadania, które trzeba wykonać, aby pomyślnie przerobić przewodnik:

  • Tworzenie pliku EDMX

  • Tworzenie projektu

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

  • Konfigurowanie dostawcy typów

  • Wykonywanie zapytań dotyczących danych

  • Wywoływanie procedury składowanej

Tworzenie pliku EDMX

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

Aby utworzyć plik EDMX

  • Jeśli nie masz jeszcze pliku EDMX, możesz wykonać instrukcje przedstawione na końcu tego przewodnika w kroku Aby skonfigurować model Entity Data Model.

Tworzenie projektu

W tym kroku należy utworzyć projekt i dodać do niego odpowiednie odwołania w celu użycia dostawcy typów EDMX.

Aby utworzyć i skonfigurować projekt języka F#

  1. Zamknij poprzedni projekt i utwórz nowy projekt o nazwie SchoolEDM.

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

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

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

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

  6. Z 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 modelu Entity Data Model

Parametry połączenia dla modelu 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 programu SQL Server przypominają poniższy 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 dotyczących parametrów połączenia EDMX, zobacz Connection Strings.

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

  • Ręczne generowanie parametrów połączenia EDMX może być trudne, więc można zaoszczędzić czas, generując je programowo.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 ich nie znasz, użyj poniższego kodu w celu wygenerowania parametrów połączenia EDMX na podstawie podanych parametrów połączenia z bazą 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 należy utworzyć i skonfigurować dostawcę typów, używając parametrów połączenia EDMX, i wygenerować typy dla schematu zdefiniowanego w pliku edmx.

Aby skonfigurować dostawcę typów i wygenerować typy

  1. Skopiuj plik edmx wygenerowany w pierwszym kroku tego przewodnika do folderu projektu.

  2. Otwórz menu skrótów dla węzła projektu w projekcie języka F# i wybierz polecenie Dodaj istniejący element, a następnie wybierz plik edmx, aby dodać go do swojego projektu.

  3. Wprowadź następujący kod, aby aktywować dostawcę typów dla pliku edmx.Zamień ciąg Server\Instance na nazwę serwera, na którym jest uruchomiony program SQL Server i nazwę jego wystąpienia. Użyj też nazwy pliku edmx z pierwszego kroku tego przewodnika.

    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 zapytań dotyczących danych

W tym kroku należy użyć wyrażeń zapytania języka F# w celu wykonania zapytania w bazie danych.

Aby wykonać zapytanie dotyczące danych

  • Wprowadź poniższy kod w celu wykonania zapytania dotyczącego danych w modelu 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ływanie procedury składowanej

Za pomocą dostawcy typów EDMX można wywoływać procedury składowane.W poniższej procedurze baza danych School zawiera procedurę składowaną UpdatePerson, która aktualizuje rekord, używając nowych wartości dla kolumn.Można użyć tej procedury składowanej, ponieważ jest ona uwidoczniona jako metoda w typie DataContext.

Aby wywołać procedurę składowaną

  • Dodaj następujący kod w celu 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.Należy zauważyć, że instrukcja exactlyOne jest używana w wyrażeniu zapytania w celu zagwarantowania, że zwracany jest tylko jeden wynik; w przeciwnym wypadku zgłaszany jest wyjątek.Aby używać wartości dopuszczających wartości null, można użyć prostej funkcji nullable, która jest zdefiniowana w tym kodzie w celu utworzenia wartości dopuszczającej wartość null na podstawie zwykłej wartości.

Konfigurowanie modelu Entity Data Model

Tę procedurę należy wykonać tylko wtedy, gdy użytkownik chce wiedzieć, jak wygenerować pełny model Entity Data Model na podstawie bazy danych, a nie ma bazy danych, której można by użyć do testowania.

Aby skonfigurować model Entity Data Model

  1. Na pasku menu wybierz kolejno pozycje SQL, Edytora języka Transact-SQL, Nowe zapytanie, aby utworzyć bazę danych.Jeśli zostanie wyświetlony monit, określ serwer bazy danych i wystąpienie.

  2. Skopiuj i wklej zawartość skryptu bazy danych tworzącego bazę danych Student, który opisano w dokumentacji programu Entity Framework w Centrum deweloperów danych.

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

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

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

    Zostanie otwarty Kreator modelu Entity Data Model.Za pomocą tego kreatora można wybrać sposób tworzenia modelu Entity Data Model.

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

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

    To połączenie powinno wyglądać następująco: <servername>.<instancename>.School.dbo.

  8. Skopiuj parametry połączenia obiektu do Schowka, ponieważ te parametry mogą okazać się później ważne.

  9. Pamiętaj, aby zaznaczyć pole wyboru zapisu parametrów połączenia obiektu w 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 wybierz pozycje Tabele oraz Procedury składowane i funkcje.

    Wybranie tych węzłów najwyższego poziomu powoduje wybranie wszystkich tabel, procedur składowanych i funkcji.Można je także wybrać indywidualnie.

  11. Upewnij się, że są też zaznaczone pola wyboru dla innych ustawień.

    Pierwsze pole wyboru Dodawanie końcówek liczby pojedynczej lub mnogiej do nazw generowanych obiektów wskazuje, czy formy liczby pojedynczej mają być zmieniane na liczbę mnogą w celu dopasowania do konwencji obowiązujących w nazwach obiektów reprezentujących tabele bazy danych.Pole wyboru Uwzględnij kolumny klucza obcego w modelu określa, czy mają być uwzględniane pola, które służą do łączenia z innymi polami w typach obiektów wygenerowanych na podstawie schematu bazy danych.Trzecie pole wyboru wskazuje, czy w modelu mają być uwzględniane procedury składowane i funkcje.

  12. Kliknij przycisk Zakończ, aby wygenerować plik edmx zawierający model Entity Data Model utworzony na podstawie bazy danych School.

    Plik Model1.edmx jest dodawany do projektu i jest wyświetlany diagram bazy danych.

  13. Na pasku menu wybierz kolejno polecenia Widok, Inne okna, Przeglądarka Entity Data Model aby wyświetlić wszystkie szczegóły modelu, lub polecenie Szczegóły mapowania Entity Data Model, aby otworzyć okno, w którym widać sposób mapowania wygenerowanego modelu obiektów na tabele i kolumny bazy danych.

Następne kroki

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

Zobacz też

Zadania

Wskazówki: uzyskiwanie dostępu do bazy danych SQL za pomocą dostawców typów i jednostek (F#)

Informacje

EdmxFile — Typ dostawcy (F#)

EDM Generator (EdmGen.exe)

Inne zasoby

Dostawcy typów

Entity Framework

.edmx File Overview (Entity Framework)