你好,我正在尝试使用Entity Framework进行事务处理。由于网上有很多关于实现事务的不同方式的信息,所以我有点困惑该如何选择正确的方式。我有一个示例数据库,其中包含两个表Employee和Company。Employee表具有指向公司ID的外键。考虑到我想要实现一个事务,在向Company表插入记录之后再向Employee表插入记录,并且只有在两者都成功插入时才插入记录,我有以下代码。
public void addCompanyToDatabase()
{
using (var context = new myTestEntities())
{
context.Connection.Open(); //added this as was getting the underlying
//provider failed to open
using (TransactionScope scope = new TransactionScope())
{
try
{
Company c = new Company();
c.Name = "xyz";
context.Companies.AddObject(c);
context.SaveChanges();
//int a = 0;
//int b = 5 / a;
Employee e = new Employee();
e.Age = 15;
e.Name = "James";
e.CompanyId = c.Id;
context.Employees.AddObject(e);
context.SaveChanges();
scope.Complete();
}
catch (Exception ex)
{
Console.WriteLine("Exception Occurred");
}
}
}
}
我想知道这是否是实现事务的正确方法。如果是,那么SaveChanges(false)
和scope.AcceptAllChanges()
函数的作用是什么。任何信息都有帮助。
SaveChanges
时。这可能发生在您需要新对象的(数据库生成的)ID或者需要强制ORM按照特定顺序执行操作时(例如,LINQ to SQL倾向于在插入之后重新排序删除,但这可能会触发数据库约束异常)。 - Steven