マップされたストアド プロシージャのアプリケーション コード (Entity Framework)
このセクションのアプリケーション コードでは、データを更新するストアド プロシージャが Entity Framework によってどのように使用されるかを示します。この例で使用するオブジェクト モデルとストアド プロシージャについては、「ストアド プロシージャのサポート (Entity Framework)」を参照してください。
ストアド プロシージャが概念スキーマで定義され、マッピング スキーマでマップされる場合、それらのストアド プロシージャは暗黙的に呼び出されます。エンティティの作成、更新、および削除に使用されるコード シーケンスは、データ モデルのストアド プロシージャを使用するかどうかにかかわらず、同じです。
ストアド プロシージャを使用したエンティティの作成
次の例では、新しい SalesOrderDetail エンティティを作成し、ストレージに挿入します。
SalesOrderDetail newSODetail = new SalesOrderDetail();
newSODetail.CarrierTrackingNumber = "4E0A-4F89-AE";
newSODetail.ModifiedDate = DateTime.Now;
newSODetail.SpecialOfferID = 1;
newSODetail.rowguid = Guid.NewGuid();
newSODetail.UnitPrice = 45.00M;
newSODetail.OrderQty = 5;
newSODetail.ProductID = 680;
objCtx.AddToSalesOrderDetails(newSODetail);
ObjectParameter par = new ObjectParameter("p", 45678);
SalesOrderHeader soHeader =
objCtx.SalesOrderHeader.Where("it.SalesOrderID = @p", par).First<SalesOrderHeader>();
soHeader.SalesOrderDetail.Add(newSODetail);
objCtx.SaveChanges();
ストアド プロシージャを使用したエンティティの変更
次のコードでは、SalesOrderDetail エンティティの注文数量プロパティを変更します。
ObjectParameter par2 = new ObjectParameter("p", 45678);
SalesOrderHeader soHeader2 =
objCtx.SalesOrderHeader.Where("it.SalesOrderID = @p", par2).First<SalesOrderHeader>();
soHeader2.SalesOrderDetail.Load();
foreach (SalesOrderDetail sodet in soHeader2.SalesOrderDetail)
{
Console.WriteLine(sodet.SalesOrderDetailID + " Prod: " +
sodet.ProductID + " Qty: " + sodet.OrderQty);
if (sodet.ProductID.Equals(680))
{
sodet.OrderQty = 6;
objCtx.SaveChanges();
break;
}
}
ストアド プロシージャを使用したエンティティの削除
次のコードでは、ストアド プロシージャを使用して SalesOrderDetail エンティティを削除します。
ObjectParameter par2 = new ObjectParameter("p", 45678);
SalesOrderHeader soHeader2 =
objCtx.SalesOrderHeader.Where("it.SalesOrderID = @p",
par2).First<SalesOrderHeader>();
soHeader2.SalesOrderDetail.Load();
foreach (SalesOrderDetail sodet in soHeader2.SalesOrderDetail)
{
Console.WriteLine(sodet.SalesOrderDetailID +
" Prod: " + sodet.ProductID + " Qty: " +
sodet.OrderQty);
if (sodet.ProductID.Equals(680))
{
objCtx.DeleteObject(sodet);
objCtx.SaveChanges();
break;
}
}
完全なアプリケーション コード
このセクションの例は、いずれも次の例に含まれています。新しい SalesOrderDetail
エンティティを作成するコードのブロックは、一度実行した後、コメント アウトしてください。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AdventureWorksModel;
using System.Data.Objects;
namespace AdvWksSalesSProcsClient
{
class Program
{
static void Main(string[] args)
{
using (AdventureWorksEntities objCtx = new AdventureWorksEntities())
{
SalesOrderDetail newSODetail = new SalesOrderDetail();
newSODetail.CarrierTrackingNumber = "4E0A-4F89-AE";
newSODetail.ModifiedDate = DateTime.Now;
newSODetail.SpecialOfferID = 1;
newSODetail.rowguid = Guid.NewGuid();
newSODetail.UnitPrice = 45.00M;
newSODetail.OrderQty = 5;
newSODetail.ProductID = 680;
objCtx.AddToSalesOrderDetails(newSODetail);
ObjectParameter par = new ObjectParameter("p", 45678);
SalesOrderHeader soHeader =
objCtx.SalesOrderHeader.Where("it.SalesOrderID = @p",
par).First<SalesOrderHeader>();
soHeader.SalesOrderDetail.Add(newSODetail);
objCtx.SaveChanges();
ObjectParameter par2 = new ObjectParameter("p", 45678);
SalesOrderHeader soHeader2 =
objCtx.SalesOrderHeader.Where("it.SalesOrderID = @p",
par2).First<SalesOrderHeader>();
soHeader2.SalesOrderDetail.Load();
foreach (SalesOrderDetail sodet in soHeader2.SalesOrderDetail)
{
Console.WriteLine(sodet.SalesOrderDetailID +
" Prod: " + sodet.ProductID + " Qty: " + sodet.OrderQty);
if (sodet.ProductID.Equals(680))
{
objCtx.DeleteObject(sodet);
objCtx.SaveChanges();
break;
}
}
foreach (SalesOrderDetail sodet in soHeader2.SalesOrderDetail)
{
Console.WriteLine(sodet.SalesOrderDetailID +
" Prod: " + sodet.ProductID +
" Qty: " + sodet.OrderQty);
if (sodet.ProductID.Equals(680))
{
sodet.OrderQty = 6;
objCtx.SaveChanges();
break;
}
}
}
}
}
}
参照
処理手順
ストアド プロシージャを使用してクエリを実行する方法 (Entity Framework)
ストアド プロシージャを使用してモデルを定義する方法 (Entity Framework)
概念
ストアド プロシージャのサポート (Entity Framework)
AdventureWorks Sales Model (EDM)
ストアド プロシージャへのアソシエーション セットのマッピング (Entity Framework)
ModificationFunctionMapping (EntityTypeMapping)
ModificationFunctionMapping (AssociationSetMapping)