## 29.2 Objektzuordnung mit Entitätsklassen Das Ergebnis einer Datenbankabfrage ist eine mehr oder minder große Menge gleich strukturierter Datensätze. Beim Mapping wird eine Datenbanktabelle auf einer Entitätsklasse abgebildet. Die Information, um welche Tabelle es sich dabei handelt, beschreibt ein Attribut, das der Klassendefinition vorangestellt wird. Um die Spalten einer Datenbanktabelle abzubilden, wird jede gewünschte Spalte in der Entitätsklasse üblicherweise durch ein privates Feld und eine öffentliche Eigenschaft beschrieben. Folgerichtig steht eine Instanz der Entitätsklasse demnach für genau einen Datensatz. Da in der Regel mehrere Datensätze vorliegen, wundert es nicht, dass die gesamte Ergebnismenge von einer Auflistung verwaltet wird. Ein Datensatz setzt sich normalerweise aus mehreren Feldern zusammen, die als Eigenschaften innerhalb der Entitätsklasse beschrieben werden. Datenbankfelder haben eigene Eigenschaften. Beispielsweise wird mindestens eine Spalte einer Tabelle als Primärschlüsselspalte definiert, andere Spalten dürfen keine NULL-Werte haben. Zur Beschreibung dieser Metadaten sind Attribute ein wichtiges Hilfsmittel. Der folgende C#-Code zeigt die Entitätsklasse Product, die die Tabelle Products der Northwind-Datenbank beschreibt. Der Code ist nicht vollständig wiedergegeben. Er soll nur dazu dienen, Ihnen eine Vorstellung davon zu vermitteln, wie die Definition einer Entitätsklasse aussieht.
    [Table(Name="dbo.Products")]
    public class Product {
      private int _ProductID;
      private string _ProductName;
      private System.Nullable<decimal> _UnitPrice;
      private System.Nullable<short> _UnitsInStock;
      [Column(Storage="_ProductID", AutoSync=AutoSync.OnInsert,
              DbType="Int NOT NULL IDENTITY",
              IsPrimaryKey=true, IsDbGenerated=true)]
      public int ProductID {
        get {
          return this._ProductID;
        }
        set {
          if ((this._ProductID != value)) {
            this._ProductID = value;
          }
        }
      }
      [Column(Storage="_ProductName", DbType="NVarChar(40) NOT NULL",
              CanBeNull=false)]
      public string ProductName {
        get {
          return this._ProductName;
        }
        set {
          if ((this._ProductName != value)) {
            this._ProductName = value;
          }
        }
      }
      [Column(Storage="_UnitPrice", DbType="Money")]
      public System.Nullable<decimal> UnitPrice {
        get {
          return this._UnitPrice;
        }
        set {
          if ((this._UnitPrice != value)) {
            this._UnitPrice = value;
          }
        }
      }
      [Column(Storage="_UnitsInStock", DbType="SmallInt")]
      public System.Nullable<short> UnitsInStock {
        get {
          return this._UnitsInStock;
        }
        set {
          if ((this._UnitsInStock != value)) {
            this._UnitsInStock = value;
          }
        }
      }
    }