【发布时间】:2011-11-26 00:19:19
【问题描述】:
您好,我正在尝试将事务与实体框架一起使用。网上有这么多关于实现交易的不同方式的信息,我必须说我对正确的方式有点困惑。我有一个包含两个表 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() 函数的用途是什么。任何信息都会有所帮助。
【问题讨论】:
标签: c# entity-framework-4 transactions transactionscope