Dělení entit návrháře
Tento návod ukazuje, jak mapovat typ entity na dvě tabulky úpravou modelu pomocí Návrháře entity Framework (EF Designer). Entitu můžete namapovat na více tabulek, když tabulky sdílejí společný klíč. Koncepty, které se vztahují na mapování typu entity na dvě tabulky, se snadno rozšíří a mapují typ entity na více než dvě tabulky.
Následující obrázek ukazuje hlavní okna, která se používají při práci s nástrojem EF Designer.
Požadavky
Edice Visual Studio 2012 nebo Visual Studio 2010, Ultimate, Premium, Professional nebo Web Express.
Vytvoření databáze
Databázový server nainstalovaný se sadou Visual Studio se liší v závislosti na nainstalované verzi sady Visual Studio:
- Pokud používáte Visual Studio 2012, budete vytvářet databázi LocalDB.
- Pokud používáte Visual Studio 2010, budete vytvářet databázi SQL Express.
Nejprve vytvoříme databázi se dvěma tabulkami, které zkombinujeme do jedné entity.
- Otevřete sadu Visual Studio.
- Zobrazení –> Průzkumník serveru
- Klikněte pravým tlačítkem na Připojení iony dat –> přidat Připojení ion...
- Pokud jste se ještě nepřipojili k databázi z Průzkumníka serveru, musíte jako zdroj dat vybrat Microsoft SQL Server .
- Připojení k LocalDB nebo SQL Expressu v závislosti na tom, který z nich jste nainstalovali
- Jako název databáze zadejte EntitySplitting .
- Vyberte OK a zobrazí se dotaz, jestli chcete vytvořit novou databázi, vyberte Ano.
- Nová databáze se teď zobrazí v Průzkumníku serveru.
- Pokud používáte Visual Studio 2012
- Klikněte pravým tlačítkem myši na databázi v Průzkumníku serveru a vyberte Nový dotaz.
- Zkopírujte následující SQL do nového dotazu, klikněte pravým tlačítkem myši na dotaz a vyberte Spustit.
- Pokud používáte Visual Studio 2010
- Výběr dat –> Editor Transact SQL –> Nový dotaz Připojení ion...
- Jako název serveru zadejte .\SQLEXPRESS a klikněte na OK.
- V rozevíracím seznamu v horní části editoru dotazů vyberte databázi EntitySplitting.
- Zkopírujte následující SQL do nového dotazu, klikněte pravým tlačítkem myši na dotaz a vyberte Spustit SQL.
CREATE TABLE [dbo].[Person] (
[PersonId] INT IDENTITY (1, 1) NOT NULL,
[FirstName] NVARCHAR (200) NULL,
[LastName] NVARCHAR (200) NULL,
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonId] ASC)
);
CREATE TABLE [dbo].[PersonInfo] (
[PersonId] INT NOT NULL,
[Email] NVARCHAR (200) NULL,
[Phone] NVARCHAR (50) NULL,
CONSTRAINT [PK_PersonInfo] PRIMARY KEY CLUSTERED ([PersonId] ASC),
CONSTRAINT [FK_Person_PersonInfo] FOREIGN KEY ([PersonId]) REFERENCES [dbo].[Person] ([PersonId]) ON DELETE CASCADE
);
Vytvoření projektu
- 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 MapEntityToTablesSample a klikněte na OK.
- Pokud se zobrazí výzva k uložení dotazu SQL vytvořeného v první části, klikněte na tlačítko Ne .
Vytvoření modelu založeného na 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 MapEntityToTablesModel.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ší.
- V rozevíracím seznamu vyberte připojení EntitySplitting a klikněte na Další.
- V dialogovém okně Zvolit databázové objekty zaškrtněte políčko vedle uzlu Tabulky . Tím se do modelu přidají všechny tabulky z databáze EntitySplitting .
- Klikněte na Finish (Dokončit).
Zobrazí se Návrhář entit, který poskytuje návrhovou plochu pro úpravy modelu.
Mapování entity na dvě tabulky
V tomto kroku aktualizujeme typ entity Person tak, aby zkombinovat data z tabulek Person a PersonInfo .
Vyberte vlastnosti e-mailu a Telefon entity **PersonInfo **a stiskněte ctrl+X klávesy.
Vyberte entitu **Person **a stiskněte ctrl+V klávesy.
Na návrhové ploše vyberte entitu PersonInfo a stiskněte tlačítko Delete na klávesnici.
Když se zobrazí dotaz, jestli chcete odebrat tabulku PersonInfo z modelu, chystáme se ji namapovat na entitu Osoba .
Další kroky vyžadují 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 Osoba a v okně Podrobnosti mapování klikněte na< Přidat tabulku nebo zobrazení>.
- V rozevíracím seznamu vyberte **PersonInfo **. Okno Podrobnosti mapování se aktualizuje s výchozími mapováními sloupců. To je v našem scénáři v pořádku.
Typ entity Person je nyní mapován na tabulky Person a PersonInfo .
Použití modelu
- Do metody Main vložte následující kód.
using (var context = new EntitySplittingEntities())
{
var person = new Person
{
FirstName = "John",
LastName = "Doe",
Email = "john@example.com",
Phone = "555-555-5555"
};
context.People.Add(person);
context.SaveChanges();
foreach (var item in context.People)
{
Console.WriteLine(item.FirstName);
}
}
- Zkompilujte a spusťte aplikaci.
Následující příkazy T-SQL byly provedeny v databázi v důsledku spuštění této aplikace.
Následující dva příkazy INSERT byly provedeny v důsledku provádění kontextu. SaveChanges(). Převezmou data z entity Person a rozdělí je mezi tabulky Person a PersonInfo .
Následující příkaz SELECT byl proveden v důsledku vytvoření výčtu osob v databázi. Kombinuje data z tabulky Person a PersonInfo .