Практическое руководство. Создание объекта с помощью статического метода создания (платформа Entity Framework)
Средства Entity Framework используют язык CSDL для формирования кода, который определяет уровень объектов. При создании классов данных каждый класс создается с помощью статического метода производства создать. Этот метод создает объект и задает все свойства класса, которые не могут иметь значения null. Этот метод включает параметр для каждого свойства, которое имеет атрибут Nullable="false" в CSDL-файле, не имеет определенного в модели значения по умолчанию, и доступно Entity Framework . В следующем примере показано задание значения по умолчанию и метод доступа set для свойства в концептуальной модели.
<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" />
Такое определение свойства в концептуальной модели позволяет генератору кода формировать сущность со свойством CarrierTrackingNumber
, имеющим значение по умолчанию «1A-2B-3C», и методом доступа set, объявленным как protected.
Используйте этот метод, чтобы создавать объекты с большим числом обязательных свойств.
Пример в этом разделе основан на модели Adventure Works Sales. Чтобы запустить код, используемый в данном разделе, нужно сначала добавить к проекту модель Adventure Works Sales и настроить его для использования платформы Entity Framework. Дополнительные сведения см. в разделе Как использовать мастер моделей EDM (Entity Framework) или Как вручную настроить проект Entity Framework и Как определить модель EDM вручную (Entity Framework).
Пример
Далее приведен пример CSDL-фрагмента для типа SalesOrderDetail в модели Модель AdventureWorks Sales:
<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>
Далее показан пример статического метода CreateSalesOrderDetail, созданного для класса SalesOrderDetail в модели AdventureWorks:
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;
}
Далее приведен пример того, как использовать статический метод CreateSalesOrderDetail для создания и сохранения объекта SalesOrderDetail:
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();
}
См. также
Основные понятия
Создание, добавление, изменение и удаление объектов (платформа Entity Framework)
Работа с объектами (платформа Entity Framework)