Freigeben über


Gewusst wie: Hinzufügen und Ändern von Objekten mit 'Tabelle pro Hierarchie'-Vererbung (Entity Framework)

In diesem Beispiel wird das im Thema Gewusst wie: Definieren eines Modells mit 'Tabelle pro Hierarchie'-Vererbung (Entity Framework) entworfene Entity Data Model (EDM) verwendet.

So erstellen Sie ein Projekt, in dem das 'Tabelle pro Hierarchie'-Vererbungsmodell verwendet wird

  1. Erstellen Sie ein Konsolenanwendungsprojekt, und fügen Sie Verweise auf System.Data.Entity und System.Runtime.Serialization hinzu.

  2. Fügen Sie einen Verweis auf die aus dem Vererbungsmodell im Thema Gewusst wie: Definieren eines Modells mit 'Tabelle pro Hierarchie'-Vererbung (Entity Framework) erstellte DLL hinzu.

  3. Fügen Sie die Schemas aus dem Thema Gewusst wie: Definieren eines Modells mit 'Tabelle pro Hierarchie'-Vererbung (Entity Framework) im gleichen Ordner wie die ausführbare Datei "SchoolDataClient" hinzu.

  4. Fügen Sie eine Anwendungskonfigurationsdatei mit dem Inhalt des folgenden Beispiels hinzu.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <connectionStrings><add name="SchoolDataLibContainer" 
       connectionString=
       "metadata=res://*/SchoolDataLib.csdl|
       res://*/SchoolDataLib.ssdl|
       res://*/SchoolDataLib.msl;provider=System.Data.SqlClient;
       provider connection string=&quot;
       Data Source=localhost;
       Initial Catalog=SchoolData;Integrated Security=True;
       MultipleActiveResultSets=True&quot;" 
       providerName="System.Data.EntityClient" />
      </connectionStrings>
    </configuration>
    

So fügen Sie die neuen abgeleiteten Typen "Instructor" und "Student" hinzu und ändern "Instructor"

  1. Instanziieren Sie den SchoolDataEntities-Objektkontext.

  2. Erstellen Sie eine neue Instanz des Typs "Instructor", und weisen Sie den Instructor-Eigenschaften Daten zu.

  3. Fügen Sie die neue "Instructor"-Instanz mit der AddToPeople-Methode dem Speicher hinzu. Der Parameter der AddToPeople-Methode ist der Name der neuen Instructor-Instanz.

  4. Speichern Sie die Änderungen.

  5. Erstellen Sie eine neue Instanz vom Typ Student, und initialisieren Sie die Eigenschaften.

  6. Fügen Sie die Instanz dem Speicher hinzu, und speichern Sie die Änderungen.

  7. Erstellen Sie einen ObjectParameter zur Verwendung in einer Abfrage einer Instructor-Instanz, deren LastName-Eigenschaft "Griffin" lautet.

  8. Testen Sie die Abfrage, um zu überprüfen, ob ein "Instructor" mit dieser Eigenschaft im Speicher vorhanden ist.

  9. Bilden Sie eine Abfrage nach dem bezeichneten "Instructor", und weisen die Instanz einer Variable mit dem Namen changeInstructor zu.

  10. Weisen Sie der Eigenschaft LastName den Wert "Anderson" zu, und speichern Sie die Änderungen.

Beispiel

Im folgenden Code werden neue Instanzen des Instructor-Typs und des Student-Typs hinzugefügt. Danach wird ein Instructor mit der LastName-Eigenschaft "Griffin" abgefragt und die LastName-Eigenschaft zu "Anderson" geändert.

Option Explicit On
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Xml
Imports System.Xml.Linq
Imports System.Text
Imports SchoolDataLib

Module Module1

    Sub Main()
        Try
            Using objectContext As SchoolDataLibContainer =
                                      New SchoolDataLibContainer()
                ' Display departments and administrators.
                For Each dept As Department In objectContext.Departments
                    Console.WriteLine("School: {0} Budget: {1}", _
                            dept.Name, dept.Budget)

                    ' Load associated contact reference if any.
                    dept.AdministratorReference.Load()
                    If dept.Administrator IsNot Nothing Then
                        Console.WriteLine("Administrator: {0} {1}", _
                            dept.Administrator.FirstName, _
                            dept.Administrator.LastName)
                    End If
                Next

                For Each eDept As DeptEngineering In _
                        objectContext.Departments.OfType(Of DeptEngineering)()
                    Console.WriteLine("{0} LabBudget: {1} FiberOp Budget: {2}", _
                        eDept.Name, eDept.LabBudget.ToString(), _
                        eDept.FiberOpticsBudget.ToString())
                Next

                Dim countDept As Integer = 0
                Dim newDept As DeptEngineering = New DeptEngineering()

                For Each dept As Department In objectContext.Departments
                    countDept = countDept + 1
                Next

                newDept.DepartmentID = countDept + 1
                newDept.Name = "Engineering School " + (countDept + 1).ToString()
                newDept.StartDate = DateTime.Now
                newDept.FiberOpticsBudget = 250000.0
                newDept.LabBudget = 400000.0
                newDept.Budget = newDept.FiberOpticsBudget + newDept.LabBudget

                ' Create new contact item to be 
                ' added as school administrator.
                Dim countPerson As Integer = 0
                For Each pers As Person In objectContext.People
                    countPerson = countPerson + 1
                Next

                Dim newAdmin As Administrator = New Administrator()
                newAdmin.PersonID = countPerson + 1
                newAdmin.FirstName = "Tony"
                newAdmin.LastName = "Allen"
                newAdmin.AdminDate = DateTime.Now - New TimeSpan(2000, 0, 0, 0)

                ' Assign the contact to Administrator property.
                newDept.Administrator = newAdmin

                ' Add admin and school to object context.
                objectContext.AddToPeople(newAdmin)
                objectContext.AddToDepartments(newDept)

                objectContext.SaveChanges()
            End Using

        Catch ex As System.Data.MappingException
            Console.WriteLine(ex.ToString())
        Catch ex As System.Data.CommandExecutionException
            Console.WriteLine(ex.ToString())
        Catch ex As System.Data.UpdateException
            Console.WriteLine(ex.ToString())
        End Try

    End Sub
End Module
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SchoolDataLibTPH;
using System.Data.Objects;
namespace SchoolDataLib
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // Add new Instructor.
                using (SchoolDataLibContainer objectContext =
                                      new SchoolDataLibContainer())
                {
                    Instructor newInstructor =
                        new Instructor();
                    newInstructor.PersonID =
                            objectContext.People.Count<Person>() + 1;
                    newInstructor.FirstName = "Satomi";
                    newInstructor.LastName = "Hayakawa";

                    newInstructor.HireDate = DateTime.Now;

                    objectContext.AddToPeople(newInstructor);
                    objectContext.SaveChanges();

                    // Add new Student.
                    Student newStudent = new Student();
                    int count = objectContext.People.Count<Person>();
                    newStudent.PersonID = count + 1;
                    newStudent.FirstName = "Uzi";
                    newStudent.LastName = "Hefetz";
                    newStudent.EnrollmentDate = DateTime.Now;


                    objectContext.AddToPeople(newStudent);
                    objectContext.SaveChanges();

                    // Change the last name of an instructor.
                    ObjectParameter param =
                                  new ObjectParameter("p", "Hayakawa");
                    if (0 != objectContext.People.OfType<Instructor>().
                                  Where("it.LastName = @p",
                                  param).Count<Instructor>())
                    {
                        Instructor changeInstructor = 
                              objectContext.People.
                              OfType<Instructor>().Where(
                             "it.LastName = @p", param).First();
                        changeInstructor.LastName = "Anderson";
                        objectContext.SaveChanges();

                    }

                    objectContext.Connection.Close();
                }
            }

            catch (System.Data.MappingException e)
            {
                Console.WriteLine(e.ToString());
            }
            catch (System.Data.UpdateException e)
            {
                Console.WriteLine(e.ToString());
            }

        }
    }
}

Siehe auch

Aufgaben

Gewusst wie: Definieren eines Modells mit 'Tabelle pro Hierarchie'-Vererbung (Entity Framework)
Gewusst wie: Erstellen und Ausführen von Objektabfragen mithilfe der 'Tabelle pro Hierarchie'-Vererbung (Entity Framework)