C#如何同时处理实体框架和ADO.NET



我有一个父子数据窗口窗体。我的父数据是由使用entity Framework创建的实体类获取的。

但我的子datagridview数据源绑定了一个数据表,该数据表具有来自数据库的multiply数据表查询。

因此,我使用实体框架插入或更新"父"数据,并使用ADO.NET创建和更新"子"数据记录。

当我插入子数据时,我必须获得父数据的Id作为外键。

在这种设置中,如何在两者之间进行交易?只是简单地使用TransactionScope

//Simpy use TransactionScope can solve this problem. 
using (TransactionScope scope = new TransactionScope())
{
tblOrder tblOrder = new tblOrder() { FOrderNum = "12345", FOrderType = "OrderTYpe", FClientID = 1086, FOrderStatus = "ReadyToProduction" };
EFContext context = new EFContext();
context.tblOrders.Add(tblOrder);
context.SaveChanges();
scope.Dispose();
int orderID = tblOrder.FOrderID;
SqlConnection conn = new SqlConnection("****");
string sql = $"INSERT INTO tblOrderSub (FOrderID,FMaterialID,FQty,FQtyShip,FFinishSKU,FModelCust,FColorCust)" +
$" VALUES(@FOrderID,@FMaterialID,@FQty,@FQtyShip,@FFinishSKU,@FModelCust,@FColorCust)";
SqlParameter[] sqlParameters =
{
new SqlParameter("@FOrderID",orderID),
new SqlParameter("@FMaterialID",1),
new SqlParameter("@FQty",1),
new SqlParameter("@FQtyShip",1),
new SqlParameter("@FFinishSKU",false),
new SqlParameter("@FModelCust", "TEst"),
new SqlParameter("@FColorCust", "C1")
};
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddRange(sqlParameters);
conn.Open();
cmd.ExecuteNonQuery();
scope.Complete();
}

最新更新