Sdílet prostřednictvím


Návod: Generování typů F# ze souboru schématu EDMX (F#)

Tento návod pro jazyk F# 3.0 popisuje způsob vytváření typů pro data reprezentovaná modelem Entity Data Model (EDM), jehož schéma je zadáno v souboru .edmx.Tento návod znázorňuje také způsob používání poskytovatele typu EdmxFile.Než začnete, zvažte, zda není vhodnější poskytovatel typu SqlEntityConnection.Poskytovatel typu SqlEntityConnection funguje nejlépe v situacích, kdy je k dispozici online databáze, ke které se lze připojit během vývojové fáze projektu, a nevadí vám zadávání připojovacího řetězce v době kompilace.Tento poskytovatel typu je však omezen tím, že neposkytuje tolik funkcí databáze jako poskytovatel typu EdmxFile.Dále platí, že pokud pro projekt databáze, který používá model Entity Data Model, nemáte připojení k online databázi, můžete pro kód databáze použít soubor .edmx.Pokud použijete poskytovatele typu EdmxFile, kompilátor jazyka F# spustí program EdmGen.exe a vygeneruje poskytované typy.

Tento návod znázorňuje následující úkoly, které je nutné z důvodu správné funkčnosti provést v tomto pořadí:

  • Vytvoření souboru EDMX

  • Vytvoření projektu

  • Vyhledání nebo vytvoření připojovacího řetězce pro model Entity Data Model

  • Konfigurace poskytovatele typu

  • Dotazování na data

  • Volání uložené procedury

Vytvoření souboru EDMX

Pokud již máte soubor EDMX, můžete tento krok přeskočit.

Postup vytvoření souboru EDMX

  • Pokud soubor EDMX ještě nemáte, můžete postupovat podle pokynů na konci tohoto návodu v kroku Postup konfigurace modelu Entity Data Model.

Vytvoření projektu

V tomto kroku vytvoříte projekt a přidáte do něj příslušné odkazy, které jsou vyžadovány pro používání poskytovatele typu EDMX.

Postup vytvoření a nastavení projektu jazyka F#

  1. Ukončete předchozí projekt, vytvořte nový projekt a zadejte název SchoolEDM.

  2. V části Průzkumník řešení otevřete místní nabídku pro Odkazy a vyberte možnost Přidat odkaz.

  3. V oblasti Sestavení zvolte uzel Rozhraní.

  4. Ze seznamu dostupných sestavení vyberte sestavení System.Data.Entity a System.Data.Linq a poté tato sestavení přidejte do projektu kliknutím na tlačítko Přidat.

  5. V oblasti Sestavení zvolte uzel Rozšíření.

  6. V seznamu dostupných rozšíření přidejte odkaz na sestavení FSharp.Data.TypeProviders.

  7. Otevřete příslušné obory názvů přidáním následujícího kódu.

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

Vyhledání nebo vytvoření připojovacího řetězce pro model Entity Data Model

Připojovací řetězec modelu Entity Data Model (připojovací řetězec EDMX) zahrnuje nejen připojovací řetězec poskytovatele databáze, ale také další informace.Například připojovací řetězec EDMX pro jednotlivou databázi SQL Server připomíná následující kód.

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

Další informace o připojovacích řetězcích EDMX naleznete v tématu Connection Strings.

Postup vyhledání nebo vytvoření připojovacího řetězce modelu Entity Data Model

  • Ruční generování připojovacích řetězců EDMX může být obtížné. Programovým generováním ušetříte čas.Pokud již připojovací řetězec EDMX znáte, můžete tento krok přeskočit a použít tento řetězec v následujícím kroku.Pokud řetězec neznáte, použijte následující kód pro vygenerování připojovacího řetězce EDMX z poskytovaného připojovacího řetězce databáze.

    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)
    

Konfigurace poskytovatele typu

V tomto kroku vytvoříte a nakonfigurujete poskytovatele typu s připojovacím řetězcem EDMX a vygenerujete typy schématu, které je definováno v souboru .edmx.

Postup konfigurace poskytovatele typu a generování typů

  1. Zkopírujte soubor .edmx vygenerovaný v prvním kroku tohoto návodu do složky projektu.

  2. Otevřete místní nabídku uzlu projektu F#, vyberte příkaz Přidat existující položku a přidejte do projektu soubor .edmx.

  3. Aktivujte poskytovatele typu pro soubor .edmx zadáním následujícího kódu.Nahraďte řetězec Server\Instance názvem serveru, na němž je spuštěn systém SQL Server, a názvem instance. Použijte název souboru .edmx z prvního kroku tohoto návodu.

    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)
    

Dotazování na data

V tomto kroku použijete výrazy dotazů jazyka F# pro zadávání dotazů na databázi.

Postup dotazování na data

  • Chcete-li zadat dotaz na data v modelu Entity Data Model, použijte následující kód.

    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)
    

Volání uložené procedury

Uložené procedury lze volat pomocí poskytovatele typu EDMX.V následujícím postupu obsahuje databáze School uloženou proceduru UpdatePerson, která aktualizuje záznam dle nových hodnot sloupců.Tuto uloženou proceduru můžete použít, protože je vystavena jako metoda v typu DataContext.

Postup volání uložené procedury

  • Aktualizujte záznamy přidáním následujícího kódu.

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

    V případě úspěchu je výsledek 1.Pamatujte, že ve výrazu dotazu je použito klíčové slovo exactlyOne, a to proto, aby byl vrácen pouze jeden výsledek; v opačném případě je vyvolána výjimka.Pro snadnější práci s povolenými hodnotami null stačí použít funkci nullable definovanou v tomto kódu a vytvořit z běžné hodnoty povolenou hodnotu null.

Konfigurace modelu Entity Data Model

Tento postup byste měli dokončit pouze v případě, že chcete vědět, jak lze vygenerovat úplný model Entity Data Model z databáze, není-li k dispozici databáze pro testování.

Postup konfigurace modelu Entity Data Model

  1. Chcete-li vytvořit databázi, vyberte na panelu nabídek možnost SQL, Editor Transact-SQL a Nový dotaz.Budete-li k tomu vyzváni, zadejte server a instanci databáze.

  2. Zkopírujte a vložte obsah skriptu databáze, který vytvoří databázi Student, jak je popsáno v dokumentaci k sadě technologií Entity Framework v datovém centru pro vývojáře.

  3. Spusťte skript jazyka SQL kliknutím na tlačítko panelu nástrojů se symbolem trojúhelníku, nebo stisknutím kombinace kláves Ctrl+Q.

  4. V části Průzkumník serveru otevřete místní nabídku pro Datová připojení, vyberte příkaz Přidat připojení a poté zadejte název databázového serveru, název instance a databázi School.

  5. Vytvořte projekt konzolové aplikace jazyka C# nebo Visual Basic, otevřete místní nabídku, vyberte možnost Přidat novou položku a poté vyberte model Datový model entity ADO.NET.

    Spustí se Průvodce datovým modelem entity.Pomocí tohoto průvodce můžete zvolit způsob vytvoření datového modelu entity.

  6. V části Výběr obsahu modelu vyberte zaškrtávací políčko Generovat z databáze.

  7. Na další stránce vyberte jako datové připojení nově vytvořenou databázi School.

    Toto připojení by mělo být obdobné jako připojení <servername>.<instancename>.School.dbo.

  8. Zkopírujte připojovací řetězec entity do schránky, protože tento řetězec můžete později potřebovat.

  9. Ověřte, zda je zaškrtnuto políčko pro uložení připojovacího řetězce entity do souboru App.Config a hodnotu řetězce si poznamenejte do textového pole. V případě potřeby připojovací řetězec později snadno vyhledáte.

  10. Na další stránce vyberte možnost Tabulky a Uložené procedury a funkce.

    Pokud vyberete tyto uzly nejvyšší úrovně, zvolíte také všechny tabulky, uložené procedury a funkce.V případě potřeby je můžete zvolit také jednotlivě.

  11. Ověřte, zda jste zvolili zaškrtávací políčka i pro ostatní nastavení.

    První políčko Převést generované názvy objektu na množné nebo jednotné číslo určuje, zda se jednotné číslo objektů představujících tabulky databáze má změnit na množné číslo tak, aby odpovídaly konvencím názvů.Políčko Zahrnout do modelu sloupce cizích klíčů určuje, zda mají být zahrnuta pole, jejichž účelem je spojit se s jinými poli v typech objektů generovaných pro schéma databáze.Třetí zaškrtávací políčko určuje, zda mají být do modelu zahrnuty uložené procedury a funkce.

  12. Kliknutím na tlačítko Dokončit bude vygenerován soubor .edmx s modelem Entity Data Model založeným na databázi School.

    Do projektu bude přidán soubor Model1.edmx a zobrazí se databázový diagram.

  13. Chcete-li zobrazit všechny podrobnosti o modelu, vyberte na panelu nabídek možnost Zobrazení, Ostatní okna, Prohlížeč modelu Entity Data Model, nebo pomocí možnosti Podrobnosti o mapování modelu Entity Data Model otevřete okno, které znázorňuje, jakým způsobem je generovaný model objektu namapován na tabulky a sloupce databáze.

Další kroky

Seznamte se také s ostatními dotazy, které jsou k dispozici v seznamu dostupných operátorů dotazu v tématu Výrazy dotazu (F#).

Viz také

Úkoly

Návod: Přístup k databázi SQL s použitím zprostředkovatelů typů a entit (F#)

Referenční dokumentace

EdmxFile – poskytovatel typů (F#)

EDM Generator (EdmGen.exe)

Další zdroje

Zprostředkovatelé typů

Rozhraní Entity Framework

.edmx File Overview (Entity Framework)