【发布时间】:2026-01-28 14:15:02
【问题描述】:
我的问题是transaction 工作不正常,如果在trascation 期间发生异常,它不应该为一个表保存数据
当所有表格都正确时,只保存数据。
考虑以下几点:
databaseEntites objEntites = null;
using (objEntites = new databaseEntites())
{
objEntites.Connection.Open();
using (System.Data.Common.DbTransaction transaction =
objEntites.Connection.BeginTransaction())
{
try
{
customer objcust=new customer();
objcust.id=id;
objcust.name="test1";
objcust.email="test@gmail.com";
objEntites.customer.AddObject(objcust);
order objorder=new order();
objorder.custid=objcust.id;
objorder.amount=500;
objEntites.order.AddObject(objorder);
objEntites.SaveChanges();
transaction.Commit();
}
catch()
{
transaction.Rollback();
}
}
}
在这个我的第二个表列名不正确,SaveChanges() 给出了例外。
当我看到数据库并发现它为客户表保存了错误的数据时,我希望当所有表都正确时数据将进入客户表,并且此 savechanges 要么保存所有表,要么不保存任何表。
为此,我也尝试了TransactionScope
using (TransactionScope tscope =
new TransactionScope(TransactionScopeOption.RequiresNew))
{
......all the code here....
objEntites.SaveChanges(false);
tscope.Complete();
objEntites.AcceptAllChanges();
}
但它给出了与上述相同的问题。
提前致谢。
【问题讨论】:
-
SaveChanges() 无法部分保存数据。它始终是一笔交易,您无需自己管理交易。如果您注意到部分数据已保存,则您的代码中一定存在其他问题。
-
我有一个关于你的问题的最新消息 - 如果有帮助,请告诉我。
标签: c# mysql entity-framework linq-to-sql transactions