Gewusst wie: Erstellen eines Objekts mit der statischen Create-Methode (Entity Framework)

Entity Framework -Tools verwenden CSDL (Conceptual Schema Definition Language, konzeptionelle Schemadefinitionssprache), um Code zur Definition der Objektebene zu generieren. Wenn die Datenklassen generiert werden, wird jede Klasse mit einer statischen create-Factorymethode erstellt. Diese Methode instanziiert ein Objekt und legt alle Eigenschaften der Klasse fest, die nicht NULL sein dürfen. Die Methode schließt einen Parameter für jede Eigenschaft ein, für die in CSDL das Nullable="false"-Attribut festgelegt wurde, die keinen im Modell definierten Standardwert besitzt und auf die Entity Framework zugreifen kann. Im folgenden Beispiel wird gezeigt, wie ein Standardwert und der Set-Accessor für eine Eigenschaft im konzeptionellen Modell angegeben werden.

<Property Name="CarrierTrackingNumber" Type="String" MaxLength="25" Unicode="true" FixedLength="false" 
          DefaultValue="1A-2B-3C"
          a:SetterAccess="Protected" xmlns:a="https://schemas.microsoft.com/ado/2006/04/codegeneration" />

Anhand dieser Eigenschaftendefinition im konzeptionellen Modell generiert der Code-Generator eine Entität mit einer CarrierTrackingNumber-Eigenschaft, die über den Standardwert "1A-2B-3C" und einen protected-Set-Accessor verfügt.

Verwenden Sie diese Methode, wenn Sie Objekte mit vielen erforderlichen Eigenschaften erstellen.

Das Beispiel in diesem Thema beruht auf dem Adventure Works Sales-Modell. Zum Ausführen des Codes in diesem Thema muss dem Projekt bereits das Adventure Works Sales-Modell hinzugefügt und das Projekt zur Verwendung von Entity Framework konfiguriert worden sein. Weitere Informationen finden Sie unter Gewusst wie: Verwenden des Assistenten für Entity Data Model (Entity Framework) bzw. Gewusst wie: Manuelles Konfigurieren eines Entity Framework-Projekts und Gewusst wie: Manuelles Definieren eines Entity Data Model (Entity Framework).

Beispiel

Im Folgenden finden Sie ein CSDL-Beispielfragment für den SalesOrderDetail-Typ im AdventureWorks Sales-Modell:

<EntityType Name="SalesOrderDetail">
  <Key>
    <PropertyRef Name="SalesOrderID" />
    <PropertyRef Name="SalesOrderDetailID" />
  </Key>
  <Property Name="SalesOrderID" Type="Int32" Nullable="false" />
  <Property Name="SalesOrderDetailID" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
  <Property Name="CarrierTrackingNumber" Type="String" MaxLength="25" Unicode="true" FixedLength="false" 
            DefaultValue="1A-2B-3C"
            a:SetterAccess="Protected" xmlns:a="https://schemas.microsoft.com/ado/2006/04/codegeneration" />
  <Property Name="OrderQty" Type="Int16" Nullable="false" />
  <Property Name="ProductID" Type="Int32" Nullable="false" />
  <Property Name="SpecialOfferID" Type="Int32" Nullable="false" />
  <Property Name="UnitPrice" Type="Decimal" Nullable="false" Precision="19" Scale="4" />
  <Property Name="UnitPriceDiscount" Type="Decimal" Nullable="false" Precision="19" Scale="4" />
  <Property Name="LineTotal" Type="Decimal" Nullable="false" Precision="38" Scale="6" annotation:StoreGeneratedPattern="Computed" />
  <Property Name="rowguid" Type="Guid" Nullable="false" />
  <Property Name="ModifiedDate" Type="DateTime" Nullable="false" />
  <NavigationProperty Name="SalesOrderHeader" Relationship="AdventureWorksModel.FK_SalesOrderDetail_SalesOrderHeader_SalesOrderID" FromRole="SalesOrderDetail" ToRole="SalesOrderHeader" />
</EntityType>

Im Folgenden finden Sie ein Beispiel der statischen CreateSalesOrderDetail-Methode, die für die SalesOrderDetail-Klasse in AdventureWorks generiert wurde:

Public Shared Function CreateSalesOrderDetail(ByVal salesOrderID As Global.System.Int32, ByVal salesOrderDetailID As Global.System.Int32, ByVal orderQty As Global.System.Int16, ByVal productID As Global.System.Int32, ByVal specialOfferID As Global.System.Int32, ByVal unitPrice As Global.System.Decimal, ByVal unitPriceDiscount As Global.System.Decimal, ByVal lineTotal As Global.System.Decimal, ByVal rowguid As Global.System.Guid, ByVal modifiedDate As Global.System.DateTime) As SalesOrderDetail
    Dim salesOrderDetail As SalesOrderDetail = New SalesOrderDetail
    salesOrderDetail.SalesOrderID = salesOrderID
    salesOrderDetail.SalesOrderDetailID = salesOrderDetailID
    salesOrderDetail.OrderQty = orderQty
    salesOrderDetail.ProductID = productID
    salesOrderDetail.SpecialOfferID = specialOfferID
    salesOrderDetail.UnitPrice = unitPrice
    salesOrderDetail.UnitPriceDiscount = unitPriceDiscount
    salesOrderDetail.LineTotal = lineTotal
    salesOrderDetail.rowguid = rowguid
    salesOrderDetail.ModifiedDate = modifiedDate
    Return salesOrderDetail
End Function
public static SalesOrderDetail CreateSalesOrderDetail(global::System.Int32 salesOrderID, global::System.Int32 salesOrderDetailID, global::System.Int16 orderQty, global::System.Int32 productID, global::System.Int32 specialOfferID, global::System.Decimal unitPrice, global::System.Decimal unitPriceDiscount, global::System.Decimal lineTotal, global::System.Guid rowguid, global::System.DateTime modifiedDate)
{
    SalesOrderDetail salesOrderDetail = new SalesOrderDetail();
    salesOrderDetail.SalesOrderID = salesOrderID;
    salesOrderDetail.SalesOrderDetailID = salesOrderDetailID;
    salesOrderDetail.OrderQty = orderQty;
    salesOrderDetail.ProductID = productID;
    salesOrderDetail.SpecialOfferID = specialOfferID;
    salesOrderDetail.UnitPrice = unitPrice;
    salesOrderDetail.UnitPriceDiscount = unitPriceDiscount;
    salesOrderDetail.LineTotal = lineTotal;
    salesOrderDetail.rowguid = rowguid;
    salesOrderDetail.ModifiedDate = modifiedDate;
    return salesOrderDetail;
}

Im Folgenden finden Sie ein Beispiel für die Verwendung der statischen CreateSalesOrderDetail-Methode für das Erstellen und Speichern eines SalesOrderDetail-Objekts:

Dim orderId As Integer = 43680
Using context As New AdventureWorksEntities()
    Dim order = (From o In context.SalesOrderHeaders
        Where o.SalesOrderID = orderId
        Select o).First()

    ' Add a new item. 
    Dim newItem As SalesOrderDetail = SalesOrderDetail.CreateSalesOrderDetail(0, 0, 5, 711, 1, CDec(13.0368), _
    0, 0, Guid.NewGuid(), DateTime.Now)
    order.SalesOrderDetails.Add(newItem)

    context.SaveChanges()
End Using
int orderId = 43680;
using (AdventureWorksEntities context
    = new AdventureWorksEntities())
{
    var order = (from o in context.SalesOrderHeaders
                 where o.SalesOrderID == orderId
                 select o).First();

    // Add a new item.
    SalesOrderDetail newItem = SalesOrderDetail.CreateSalesOrderDetail(
        0, 0, 5, 711, 1, (decimal)13.0368,
        0, 0, Guid.NewGuid(), DateTime.Now);
    order.SalesOrderDetails.Add(newItem);

    context.SaveChanges();
}

Siehe auch

Konzepte

Erstellen, Hinzufügen, Ändern und Löschen von Objekten (Entity Framework)
Arbeiten mit Objekten (Entity Framework)