C# 如何在实体框架中使用LINQ到SQL回滚事务?
这是我的密码:C# 如何在实体框架中使用LINQ到SQL回滚事务?,c#,entity-framework,linq,transactions,C#,Entity Framework,Linq,Transactions,这是我的密码: TransactionScope trans = new TransactionScope(); dbDataContext db = new dbDataContext() // did some insert var user = new User(); user.ID = 1; user.Name = "Nick"; db.Users.Add(user); db.SubmitChanges(); trans.Complete(); 现在,如果在保存更改时发生错误,如何
TransactionScope trans = new TransactionScope();
dbDataContext db = new dbDataContext()
// did some insert
var user = new User();
user.ID = 1;
user.Name = "Nick";
db.Users.Add(user);
db.SubmitChanges();
trans.Complete();
现在,如果在保存更改时发生错误,如何回滚事务?有两种方法可以在entity framework中使用事务。一个使用TransactionScope,另一个使用数据库事务 要使用数据库事务,请使用以下代码示例:
using (dbDataContext db = new dbDataContext())
using (var dbContextTransaction = db.Database.BeginTransaction())
{
try
{
var user = new User(){ID = 1, Name = "Nick"};
db.Users.Add(user);
db.SaveChanges();
dbContextTransaction.Commit();
}
catch (Exception)
{
dbContextTransaction.Rollback();
}
}
以下是EF的TransactionScope示例:
using (TransactionScope tranScope = new TransactionScope())
using (dbDataContext db = new dbDataContext())
{
try
{
var user = new User(){ID = 1, Name = "Nick"};
db.Users.Add(user);
db.SaveChanges();
tranScope.Complete();
}
catch(Exception ex){}
}
如您所见,在TransactionScope的情况下,您不需要调用任何回滚方法。如果不调用Complete()方法,事务将不会被提交,并在被处理之前自动回滚。谢谢!!我不熟悉实体框架。。这很有帮助……)这段代码甚至可以编译吗?请检查并更正。@MKR我提供上述代码仅供参考。@chaosifer我对
SubmitChanges
函数调用有疑问。我遗漏了什么吗?你所说的db.SubmitChanges()到底是什么意思代码>?dbDataContext
的定义是什么?要么使用Linq to SQL(一种由C#团队作为概念证明构建的ORM,仅针对SQL Server运行,使用.dbml
模型文件),要么使用Entity Framework,这是另一种ORM,由Microsoft的ADO.NET团队构建,它支持多个数据库和基于模型和代码的方法,不能同时使用这两种方法。那么是哪一个呢??