Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här genomgången visar hur du mappar en entitetstyp till två tabeller genom att ändra en modell med Entity Framework Designer (EF Designer). Du kan mappa en entitet till flera tabeller när tabellerna delar en gemensam nyckel. Begreppen som gäller för att mappa en entitetstyp till två tabeller utökas enkelt till att mappa en entitetstyp till fler än två tabeller.
Följande bild visar de huvudfönster som används när du arbetar med EF Designer.
Förutsättningar
Visual Studio 2012 eller Visual Studio 2010, Ultimate, Premium, Professional eller Web Express edition.
Skapa databasen
Databasservern som är installerad med Visual Studio skiljer sig beroende på vilken version av Visual Studio du har installerat:
- Om du använder Visual Studio 2012 skapar du en LocalDB-databas.
- Om du använder Visual Studio 2010 skapar du en SQL Express-databas.
Först skapar vi en databas med två tabeller som vi ska kombinera till en enda entitet.
- Öppna Visual Studio
- Visa –> ServerUtforskaren
- Högerklicka på Dataanslutningar –> Lägg till anslutning...
- Om du inte har anslutit till en databas från Server Explorer innan du måste välja Microsoft SQL Server som datakälla
- Anslut till antingen LocalDB eller SQL Express, beroende på vilken du har installerat
- Ange EntitySplitting som databasnamn
- Välj OK så tillfrågas du om du vill skapa en ny databas och väljer Ja
- Den nya databasen visas nu i Server Explorer
- Om du använder Visual Studio 2012
- Högerklicka på databasen i Server Explorer och välj Ny fråga
- Kopiera följande SQL till den nya frågan och högerklicka sedan på frågan och välj Kör
- Om du använder Visual Studio 2010
- Välj Data –> Transact SQL Editor –> Ny frågeanslutning...
- Ange .\SQLEXPRESS som servernamn och klicka på OK
- Välj entitySplitting-databasen i listrutan överst i frågeredigeraren
- Kopiera följande SQL till den nya frågan och högerklicka sedan på frågan och välj Kör 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
);
Skapa projektet
- Peka på Nytt på Arkiv-menyn och klicka sedan på Projekt.
- I den vänstra rutan klickar du på Visual C#och väljer sedan mallen Konsolprogram .
- Ange MapEntityToTablesSample som namnet på projektet och klicka på OK.
- Klicka på Nej om du uppmanas att spara SQL-frågan som skapades i det första avsnittet.
Skapa en modell baserat på databasen
- Högerklicka på projektnamnet i Solution Explorer, peka på Lägg till och klicka sedan på Nytt objekt.
- Välj Data på den vänstra menyn och välj sedan ADO.NET entitetsdatamodell i fönstret Mallar.
- Ange MapEntityToTablesModel.edmx som filnamn och klicka sedan på Lägg till.
- I dialogrutan Välj modellinnehåll väljer du Generera från databas och klickar sedan på Nästa.
- Välj EntitySplitting-anslutningen i listrutan och klicka på Nästa.
- I dialogrutan Välj databasobjekt markerar du kryssrutan bredvid noden Tabeller . Då läggs alla tabeller från EntitySplitting-databasen till modellen.
- Klicka på Finish.
Entitetsdesignern, som tillhandahåller en designyta för redigering av din modell, visas.
Mappa en entitet till två tabeller
I det här steget uppdaterar vi entitetstypen Person för att kombinera data från tabellerna Person och PersonInfo .
Välj egenskaperna E-post och telefon för entiteten **PersonInfo **och tryck på Ctrl+X-tangenterna .
Välj entiteten **Person **och tryck på Ctrl+V-nycklar .
På designytan väljer du entiteten PersonInfo och trycker på knappen Ta bort på tangentbordet.
Klicka på Nej när du tillfrågas om du vill ta bort tabellen PersonInfo från modellen. Vi håller på att mappa den till entiteten Person .
Nästa steg kräver fönstret Mappningsinformation . Om du inte kan se det här fönstret högerklickar du på designytan och väljer Mappningsinformation.
- Välj entitetstypen Person och klicka på <Lägg till en tabell eller vy> i fönstret Mappningsinformation .
- Välj **PersonInfo ** i listrutan. Fönstret Mappningsinformation uppdateras med standardkolumnmappningar. Dessa är bra för vårt scenario.
Entitetstypen Person mappas nu till tabellerna Person och PersonInfo.
Använd modellen
- Klistra in följande kod i main-metoden.
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);
}
}
- Kompilera och kör programmet.
Följande T-SQL-instruktioner kördes mot databasen som ett resultat av att programmet kördes.
Följande två INSERT-instruktioner kördes som ett resultat av att metoden context.SaveChanges() exekverades. De tar data från entiteten Person och delar upp dem mellan tabellerna Person och PersonInfo .
Följande SELECT kördes som ett resultat av att personerna i databasen räknas upp. Den kombinerar data från tabellen Person och PersonInfo .