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 flera entitetstyper till en enskild tabell genom att ändra en modell med Entity Framework Designer (EF Designer).
En anledning till att du kanske vill använda tabelldelning är att fördröja inläsningen av vissa egenskaper när du använder lat inläsning för att läsa in dina objekt. Du kan separera de egenskaper som kan innehålla mycket stora mängder data i en separat entitet och bara läsa in dem när det behövs.
Följande bild visar de huvudfönster som används när du arbetar med EF Designer.
Förutsättningar
För att kunna utföra den här genomgången behöver du:
- En ny version av Visual Studio.
- Skola exempeldatabasen.
Konfigurera projektet
Den här genomgången använder Visual Studio 2012.
- Öppna Visual Studio 2012.
- 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 TableSplittingSample som namnet på projektet och klicka på OK.
Skapa en modell baserat på skoldatabasen
- 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 TableSplittingModel.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.
- Klicka på Ny anslutning. I dialogrutan Anslutningsegenskaper anger du servernamnet (till exempel (localdb)\mssqllocaldb), väljer autentiseringsmetoden, skriver School för databasnamnet och klickar sedan på OK. Dialogrutan Välj dataanslutning uppdateras med inställningen för databasanslutning.
- I dialogrutan Välj databasobjekt expanderar du noden Tabeller och markerar tabellen Person. Då läggs den angivna tabellen till i skolmodellen .
- Klicka på Finish.
Entitetsdesignern, som tillhandahåller en designyta för redigering av din modell, visas. Alla objekt som du har valt i dialogrutan Välj databasobjekt läggs till i modellen.
Mappa två entiteter till en enskild tabell
I det här avsnittet ska du dela upp entiteten Person i två entiteter och sedan mappa dem till en enda tabell.
Anmärkning
Entiteten Person innehåller inga egenskaper som kan innehålla stora mängder data. det används bara som ett exempel.
- Högerklicka på ett tomt område på designytan, peka på Lägg till ny och klicka på Entitet. Dialogrutan Ny entitet visas.
- Skriv HireInfo som entitetsnamn och PersonID som nyckelegenskapsnamn .
- Klicka på OK.
- En ny entitetstyp skapas och visas på designytan.
- Välj egenskapen HireDate för entitetstypen Person och tryck på Ctrl+X-tangenter .
- Välj entiteten HireInfo och tryck på Ctrl+V-nycklar .
- Skapa en association mellan Person och HireInfo. Det gör du genom att högerklicka på ett tomt område på designytan, peka på Lägg till ny och klicka på Association.
- Dialogrutan Lägg till association visas. PersonHireInfo-namnet anges som standard.
- Ange multiplicity 1(One) i båda ändar av relationen.
- Tryck på OK.
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 HireInfo och klicka på <Lägg till en tabell eller vy> i fönstret Mappningsinformation .
Välj Person i <listrutan Lägg till en tabell eller Visa> fält. Listan innehåller tabeller eller vyer som den valda entiteten kan mappas till. Lämpliga egenskaper ska mappas som standard.
Välj associationen PersonHireInfo på designytan.
Högerklicka på associationen på designytan och välj Egenskaper.
I fönstret Egenskaper väljer du egenskapen Referensbegränsningar och klickar på ellipsknappen.
Välj Person i listrutan Huvudnamn .
Tryck på OK.
Använd modellen
- Klistra in följande kod i main-metoden.
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);
}
- Kompilera och kör programmet.
Följande T-SQL-instruktioner kördes mot skoldatabasen som ett resultat av att programmet kördes.
Följande INSERT kördes som ett resultat av att kontexten kördes. SaveChanges() och kombinerar data från entiteterna Person och HireInfo
Följande SELECT kördes som ett resultat av att köra context.People.FirstOrDefault(), och väljer bara de kolumner som mappats till Person
Följande SELECT kördes som ett resultat av åtkomsten till navigeringsegenskapen existingPerson.Instructor och väljer bara kolumnerna som mappats till HireInfo