C#如何同时处理实体框架和ADO.NET
我有一个父-子数据窗口窗体。我的父数据由使用entity Framework创建的实体类获取 但我的子datagridview数据源与一个datatable绑定,该datatable具有来自我的数据库的多数据表查询 因此,我使用实体框架插入或更新“父”数据,并使用ADO.NET创建和更新“子”数据记录 当我插入子数据时,我必须将父数据的Id作为外键 在此设置中,如何在这两者之间进行事务处理?C#如何同时处理实体框架和ADO.NET,c#,C#,我有一个父-子数据窗口窗体。我的父数据由使用entity Framework创建的实体类获取 但我的子datagridview数据源与一个datatable绑定,该datatable具有来自我的数据库的多数据表查询 因此,我使用实体框架插入或更新“父”数据,并使用ADO.NET创建和更新“子”数据记录 当我插入子数据时,我必须将父数据的Id作为外键 在此设置中,如何在这两者之间进行事务处理? 只需使用TransactionScope?使用相同的DB连接并在该对象上启用事务,或者创建多个连接并附加
只需使用
TransactionScope
?使用相同的DB连接并在该对象上启用事务,或者创建多个连接并附加相同的事务对象。在一般情况下,事务是不好的设计思想。在这里,让一切都成为同一个操作的一部分,be和idea DB隐式事务,在这种情况下,一切都去了,或者什么都没有。在这种情况下,这可能行得通,但在具有多个资源(如集合)的一般分布式事务中,总是不好的主意,总是尝试使用隐式事务
//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();
}