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团队构建,它支持多个数据库和基于模型和代码的方法,不能同时使用这两种方法。那么是哪一个呢??