Freigeben über


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

In diesem Thema wird das im Thema Gewusst wie: Definieren eines Modells mit einer 'Tabelle pro Typ'-Vererbung (Entity Framework) definierte Entity Data Model (EDM) verwendet. Es wird dargestellt, wie in einer "Tabelle pro Typ"-Vererbungshierarchie eine Instanz des abgeleiteten Typs hinzugefügt wird.

So erstellen Sie ein Projekt, in dem die "Tabelle pro Typ"-Vererbung verwendet wird

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

  2. Fügen Sie einen Verweis auf die DLL hinzu, die aus der unter Gewusst wie: Definieren eines Modells mit einer 'Tabelle pro Typ'-Vererbung (Entity Framework) beschriebenen Vererbungshierarchie erstellt wurde.

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

  4. Fügen Sie dem Projekt eine Anwendungskonfigurationsdatei mit folgendem Inhalt 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 eine Instanz des abgeleiteten Typs hinzu

  1. Erstellen Sie eine Instanz des DeptEngineering-Typs mit dem Namen newDept.

  2. Initialisieren Sie die Eigenschaftsdaten von newDept.

  3. Erstellen Sie eine neue Instanz des Person-Typs.

  4. Weisen Sie der PersonCategory-Eigenschaft den Wert 3 zu, um die Zugehörigkeit zur Administrator-Kategorie anzugeben.

  5. Initialisieren Sie die Eigenschaften von newAdmin.

  6. Weisen Sie der Administrator-Eigenschaft von newDept die neue Person zu.

  7. Fügen Sie newDept und newAdmin dem Speicher hinzu, und speichern Sie die Änderungen.

Beispiel

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("People", newAdmin)
                objectContext.AddToDepartments("Departments", 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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SchoolDataLib;

namespace SchoolDataClient
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                using (SchoolDataLibContainer objectContext =
                                      new SchoolDataLibContainer())
                {
                    DeptEngineering newDept =
                                         new DeptEngineering();

                    int countDept = 
                        objectContext.Departments.Count<Department>();
                    newDept.DepartmentID = countDept + 1;
                    newDept.Name = "Engineering School " +
                                          (countDept + 1).ToString();
                    newDept.StartDate = DateTime.Now;
                    newDept.FiberOpticsBudget = 250000.00M;
                    newDept.LabBudget = 400000.00M;
                    newDept.Budget = newDept.FiberOpticsBudget + 
                        newDept.LabBudget;

                    // Create new contact item to be 
                    // added as school administrator.
                    int countPerson = objectContext.People.Count<Person>();
                    Administrator newAdmin = new Administrator();
                    newAdmin.PersonID = countPerson + 1;
                    newAdmin.FirstName = "Jesper";
                    newAdmin.LastName = "Aaberg";
                    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();
                }
            }

            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 einer 'Tabelle pro Typ'-Vererbung (Entity Framework)
Gewusst wie: Erstellen und Ausführen von Objektabfragen mithilfe der 'Tabelle pro Typ'-Vererbung (Entity Framework)