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.
Požadavky
K dokončení toho návodu budete potřebovat:
- Nejnovější verze sady Visual Studio.
- Ukázková databáze školy.
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.
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
Následující příkaz SELECT byl proveden v důsledku spuštění context.Lidé. FirstOrDefault() a vybere jenom sloupce namapované na osobu.
Následující select byl proveden v důsledku přístupu k navigační vlastnosti existingPerson.Instructor a vybere pouze sloupce mapované na HireInfo.