Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresář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.
Předpoklady
K dokončení tohoto názorného postupu potřebujete:
- 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íku ř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 Nové připojení. V dialogovém okně Vlastnosti připojení 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 datové připojení 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 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é mohou obsahovat velké množství dat; používá se jenom 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 .
- Klikněte na 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 osobou 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ě < klikněte na >Přidat tabulku nebo zobrazení.
V rozevíracím seznamu <Přidat tabulku nebo Zobrazit> vyberte Osoba. 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.
Vyberte asociaci PersonHireInfo na návrhové ploše.
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.
Z rozevíracího seznamu Principál 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 provádění kontextu. People.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.