Sdílet prostřednictvím


Názorný postup: Generování typy F# ze souboru schématu EDMX (F#)

Tento návod pro jazyk F# 3.0 ukazuje, jak vytvořit typy pro data reprezentovaná datovým modelem entity (EDM), tedy schématem určeným informacemi v souboru .edmx.Tento návod také ukazuje, jak použít poskytovatele typů EdmxFile.Před započetím zvažte, zda není poskytovatel typů SqlEntityConnection vhodnější volbou poskytovatele typů.Poskytovatel typů SqlEntityConnection funguje nejlépe v situacích, kdy je k dispozici online databáze, ke které lze připojit během vývojové fáze projektu a není na obtíž určení připojovacího řetězce v době kompilace.Tento poskytovatel typů má však omezení v tom, že neposkytuje tolik funkcí databáze jako poskytovatel EdmxFile.Také pokud pro databázový projekt používající datový model entity není k dispozici připojení k online databázi, lze pro kódování oproti databázi použít soubor .edmx.Je-li použit poskytovatel typů EdmxFile, kompilátor jazyka F# spustí program EdmGen.exe a vygeneruje poskytované typy.

Tento návod popisuje následující úkoly, které je nezbytné pro správnou činnost provést v uvedeném pořadí:

  • Vytvoření souboru EDMX

  • Vytvoření projektu

  • Nalezení nebo vytvoření připojovacího řetězce pro datový model entity

  • Konfigurace poskytovatele typů

  • Dotazování na data

  • Volání uložené procedury

Vytvoření souboru EDMX

Pokud je soubor EDMX již k dispozici, lze tento krok přeskočit.

Vytvoření souboru EDMX

  • Pokud ještě soubor EDMX k dispozici není, lze vytvořit datový model entity a soubor EDMX pro databázi následováním instrukcí v dokumentu ADO.NET Entity Framework Quickstart.Alternativně se lze také řídit instrukcemi na konci tohoto návodu v kroku Konfigurace datového modelu entity.

Vytvoření projektu

V tomto kroku je vytvořen projekt a přidány příslušné odkazy pro využití poskytovatele typů EDMX.

Vytvoření a nastavení projektu jazyka F#

  1. Uzavřete předchozí projekt, vytvořte nový projekt a pojmenujte jej SchoolEDM.

  2. V Průzkumníkovi řešení otevřete místní nabídku pro Odkazy a zvolte Přidat odkaz.

  3. V oblasti Sestavení zvolte uzel Rozhraní.

  4. Ze seznamu dostupných sestavení zvolte sestavení System.Data.Entity a System.Data.Linq a poté do projektu tato sestavení přidejte 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
    

Nalezení nebo vytvoření připojovacího řetězce pro datový model entity

Připojovací řetězec datového modelu entity (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 jednoduchou databázi serveru 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.

Nalezení nebo vytvoření připojovacího řetězce datového modelu entity

  • Ruční generování připojovacích řetězců EDMX může být obtížné, proto lze ušetřit čas jejich generováním programově.Je-li již připojovací řetězec EDMX znám, lze tento krok přeskočit a použít tento řetězec v následujícím kroku.Pokud řetězec znám není, použijte pro vygenerování připojovacího řetězce EDMX z poskytnutého připojovacího řetězce databáze následující kód.

    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 typů

V tomto kroku je vytvořen a nakonfigurován poskytovatel typů s připojovacím řetězcem EDMX a vygenerovány typy schématu definovaného v souboru .edmx.

Konfigurace poskytovatele typů 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#, zvolte Přidat existující položku a přidejte soubor .edmx do projektu.

  3. Aktivujte poskytovatele typů 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 server SQL Server, a názvem instance a 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 využijete dotazovacího výrazu jazyka F# pro dotazování databáze.

Dotazování na data

  • Na data v datovém modelu entity se dotážete vložením následujícího kódu.

    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 typů EDMX.V následujícím postupu databáze School obsahuje uloženou proceduru UpdatePerson, která aktualizuje záznam dle nových hodnot sloupců.Tuto uloženou proceduru lze použít, protože je vystavena jako metoda v typu DataContext.

Volání uložené procedůry

  • Pro aktualizaci záznamů přidejte následující kód.

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

    Při úspěchu je výsledek 1.Povšimněte si, že je ve výrazu dotazu použito klíčové slovo exactlyOne, aby byl zajištěn návrat pouze jednoho výsledku; v opačném případě je vyvolána výjimka.Pro snadnější práci s hodnotami s podporou hodnoty null lze rovněž použít jednoduchou funkci nullable definovanou v tomto kódu a vytvořit tak z obyčejné hodnoty hodnotu s podporou hodnoty null.

Konfigurace datového modelu entity

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

Konfigurace datového modelu entity

  1. Pro vytvoření databáze zvolte v řádku nabídek nabídku SQL, Editor jazyka Transact-SQL a Nový dotaz.Budete-li k tomu vyzváni, zadejte server databáze a instanci.

  2. Zkopírujte a vložte obsah skriptu databáze, který vytváří databázi Student, jak je popsáno v dokumentu Creating the School Sample Database.

    Následující kroky tohoto návodu jsou založeny na tématu ADO.NET Entity Data Model Quickstart.

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

  4. V Průzkumníku serveru otevřete místní nabídku pro Připojení dat, zvolte možnost Přidat připojení a poté zadejte název databázového serveru, název instance a databázi School.

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

    Spustí se Průvodce datovým modelem entity.Pomocí tohoto průvodce lze zvolit způsob tvorby datového modelu entity.

  6. Pod oddílem Zvolte obsah modelu zaškrtněte políčko Generovat z databáze.

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

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

  8. Zkopírujte připojovací řetězec entity do schránky, protože jej může být později zapotřebí.

  9. Ujistěte se, že je zaškrtnuto políčko pro uložení připojovacího řetězce entity do souboru App.Config a poznamenejte si hodnotu řetězce do textového pole, což později pomůže připojovací řetězec najít, bude-li to zapotřebí.

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

    Zvolením těchto uzlů nejvyšší úrovně dojde ke zvolení všech tabulek, uložených procedur a funkcí.Je také možné je zvolit jednotlivě.

  11. Ujistěte se, že jsou zaškrtnuta políčka ostatních nastavení.

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

  12. Kliknutím na tlačítko Dokončit dojde k vygenerování souboru .edmx obsahujícího datový model entit založený na databázi School.

    Do projektu je přidán soubor Model1.edmx a zobrazí se diagram databáze.

  13. Pro zobrazení všech podrobností o modelu zvolte v řádku nabídek možnost Zobrazení, Ostatní okna, Prohlížeč datového modelu entity, nebo možností Podrobnosti o mapování datového modelu entity otevřete okno zobrazující, jakým způsobem je generovaný objekt namapován na tabulky a sloupce databáze.

Další kroky

Prohlédnout si jiné dotazy v tématu Výrazy dotazu (F#), kde jsou vypsány dostupné operátory dotazu.

Viz také

Úkoly

Názorný postup: Přístup K databázi SQL pomocí zprostředkovatelů typu a subjekty (F#)

Referenční dokumentace

Zprostředkovatel EdmxFile typu (F#)

Další zdroje

Typ zprostředkovatele

ADO.NET Entity Framework

.edmx File Overview (Entity Framework)

Edm Generator (EdmGen.exe)