이 설명서는 보관되지만 유지 되지 않습니다.

방법: 정적 Create 메서드를 사용하여 개체 만들기(Entity Framework)

Entity Framework 도구는 CSDL(개념 스키마 정의 언어)을 사용하여 개체 계층을 정의하는 코드를 생성합니다. 데이터 클래스가 생성되면 정적 create 팩터리 메서드가 있는 클래스가 생성됩니다. 이 메서드는 개체를 인스턴스화하고 null일 수 없는 클래스의 모든 속성을 설정합니다. 이 메서드에는 CSDL에서 Nullable="false" 특성이 적용되고 모델에서 기본값이 정의되어 있지 않으며 Entity Framework 에서 액세스할 수 있는 모든 속성에 대한 매개 변수가 포함됩니다. 다음 예제에서는 개념적 모델에서 속성에 대한 기본값과 set 접근자를 지정하는 방법을 보여 줍니다.

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

개념적 모델에서 이 속성 정의를 사용하는 경우 코드 생성기는 기본값이 "1A-2B-3C"이고 protected set 접근자가 있는 CarrierTrackingNumber 속성이 포함된 엔터티를 생성합니다.

필수 속성이 여러 개인 개체를 만들 때 이 메서드를 사용합니다.

이 항목의 예제는 Adventure Works Sales 모델을 기반으로 합니다. 이 항목의 코드를 실행하려면 프로젝트에 Adventure Works Sales 모델을 추가하고 프로젝트에서 Entity Framework를 사용하도록 구성해야 합니다. 자세한 내용은 방법: 엔터티 데이터 모델 마법사 사용(Entity Framework) 또는 방법: Entity Framework 프로젝트 수동 구성방법: 엔터티 데이터 모델 수동 정의(Entity Framework)를 참조하십시오.

예제

다음은 AdventureWorks Sales 모델SalesOrderDetail 형식에 대한 예제 CSDL 부분입니다.

<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="http://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>

다음은 AdventureWorks의 SalesOrderDetail 클래스에 대해 생성된 정적 CreateSalesOrderDetail 메서드 예제입니다.

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;
}

다음은 정적 CreateSalesOrderDetail 메서드를 사용하여 SalesOrderDetail 개체를 만들고 저장하는 방법에 대한 예제입니다.

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();
}

참고 항목

표시: