Rozdělení tabulky návrháře

Tento návod ukazuje, jak mapovat více typů entit na jednu tabulku úpravou modelu pomocí Návrháře Entity Framework (EF Designer).

Jedním z důvodů, proč můžete chtít použít rozdělení tabulky, je zpoždění načítání některých vlastností při použití opožděného načítání k načtení objektů. Vlastnosti, které můžou obsahovat velmi velké množství dat, můžete oddělit do samostatné entity a načíst je pouze v případě potřeby.

Následující obrázek ukazuje hlavní okna, která se používají při práci s nástrojem EF Designer.

EF Designer

Požadavky

K dokončení toho návodu budete potřebovat:

Nastavení projektu

Tento názorný postup používá Visual Studio 2012.

  • Otevřete Visual Studio 2012.
  • V nabídce Soubor přejděte na příkaz Nový a klepněte na tlačítko Projekt.
  • V levém podokně klikněte na Visual C# a pak vyberte šablonu konzolové aplikace.
  • Jako název projektu zadejte TableSplittingSample a klikněte na OK.

Vytvoření modelu založeného na školní databázi

  • Klikněte pravým tlačítkem myši na název projektu v Průzkumník řešení, přejděte na příkaz Přidat a potom klikněte na položku Nová položka.
  • V nabídce vlevo vyberte Data a pak v podokně Šablony vyberte ADO.NET Model dat entity.
  • Jako název souboru zadejte TableSplittingModel.edmx a klepněte na tlačítko Přidat.
  • V dialogovém okně Zvolit obsah modelu vyberte Vygenerovat z databáze a potom klepněte na tlačítko Další.
  • Klikněte na Tlačítko Nový Připojení ion. V dialogovém okně vlastnosti Připojení ion zadejte název serveru (například (localdb)\mssqllocaldb), vyberte metodu ověřování, jako název databáze zadejte School a klikněte na tlačítko OK. Dialogové okno Zvolit data Připojení ion se aktualizuje nastavením připojení k databázi.
  • V dialogovém okně Zvolit databázové objekty rozbalte uzel Tabulky a zaškrtněte tabulku Person . Tím přidáte zadanou tabulku do školního modelu.
  • Klikněte na Finish (Dokončit).

Zobrazí se Návrhář entit, který poskytuje návrhovou plochu pro úpravy modelu. Do modelu se přidají všechny objekty, které jste vybrali v dialogovém okně Zvolit databázové objekty .

Mapování dvou entit na jednu tabulku

V této části rozdělíte entitu Person do dvou entit a pak je namapujete na jednu tabulku.

Poznámka

Entita Person neobsahuje žádné vlastnosti, které můžou obsahovat velké množství dat. Slouží pouze jako příklad.

  • Klikněte pravým tlačítkem myši na prázdnou oblast návrhové plochy, přejděte na příkaz Přidat nový a klikněte na položku Entita. Zobrazí se dialogové okno Nová entita.
  • Zadejte HireInfo pro název entity a PersonID pro název klíčové vlastnosti.
  • Klepněte na tlačítko OK.
  • Vytvoří se nový typ entity a zobrazí se na návrhové ploše.
  • Vyberte vlastnost HireDate typu entity Person a stiskněte kombinaci kláves Ctrl+X.
  • Vyberte entitu HireInfo a stiskněte kombinaci kláves Ctrl+V .
  • Vytvořte přidružení mezi osobami a HireInfo. Uděláte to tak, že kliknete pravým tlačítkem myši na prázdnou oblast návrhové plochy, přejdete na příkaz Přidat nový a kliknete na Tlačítko Přidružení.
  • Zobrazí se dialogové okno Přidat přidružení . Název PersonHireInfo je ve výchozím nastavení uveden.
  • Zadejte násobnost 1(1) na obou koncích relace.
  • Stiskněte OK.

Další krok vyžaduje okno Podrobnosti mapování . Pokud toto okno nevidíte, klikněte pravým tlačítkem myši na návrhovou plochu a vyberte Mapovat podrobnosti.

  • Vyberte typ entity HireInfo a v okně Podrobnosti mapování klikněte na< Přidat tabulku nebo zobrazení>.

  • V rozevíracím< seznamu Přidat tabulku nebo Zobrazit> vyberte osobu. Seznam obsahuje tabulky nebo zobrazení, na které lze namapovat vybranou entitu. Ve výchozím nastavení by se měly namapovat příslušné vlastnosti.

    Mapping Properties

  • Na návrhové ploše vyberte přidružení PersonHireInfo.

  • Klikněte pravým tlačítkem myši na přidružení na návrhové ploše a vyberte Vlastnosti.

  • V okně Vlastnosti vyberte vlastnost Referenční omezení a klikněte na tlačítko se třemi tečkami.

  • V rozevíracím seznamu Objekt zabezpečení vyberte osobu.

  • Stiskněte OK.

 

Použití modelu

  • Do metody Main vložte následující kód.
    using (var context = new SchoolEntities())
    {
        Person person = new Person()
        {
            FirstName = "Kimberly",
            LastName = "Morgan",
            Discriminator = "Instructor",
        };

        person.HireInfo = new HireInfo()
        {
            HireDate = DateTime.Now
        };

        // Add the new person to the context.
        context.People.Add(person);

        // Insert a row into the Person table.  
        context.SaveChanges();

        // Execute a query against the Person table.
        // The query returns columns that map to the Person entity.
        var existingPerson = context.People.FirstOrDefault();

        // Execute a query against the Person table.
        // The query returns columns that map to the Instructor entity.
        var hireInfo = existingPerson.HireInfo;

        Console.WriteLine("{0} was hired on {1}",
            existingPerson.LastName, hireInfo.HireDate);
    }
  • Zkompilujte a spusťte aplikaci.

Následující příkazy T-SQL byly provedeny proti databázi School v důsledku spuštění této aplikace. 

  • Následující příkaz INSERT byl proveden v důsledku provádění kontextu. SaveChanges() a kombinuje data z entit Person a HireInfo

    Insert Combining Person and HireInfo Data

  • Následující příkaz SELECT byl proveden v důsledku spuštění context.Lidé. FirstOrDefault() a vybere jenom sloupce namapované na osobu.

    Select 1

  • Následující select byl proveden v důsledku přístupu k navigační vlastnosti existingPerson.Instructor a vybere pouze sloupce mapované na HireInfo.

    Select 2