我试图通过回滚我们的datacontexts解决问题。 我们使用一个TransactionScope,并在两个不同数据库的两个数据上下文中。
最后我们要保存两个数据库的更改,以便调用.SaveChanges,但问题是当其他数据库发生错误时,第一个数据库上的更改仍然保存。
第一个数据库没有回滚,我做错了什么?
谢谢,
的Jakub
public void DoWork()
{
using (var scope = new TransactionScope())
{
using (var rawData = new IntranetRawDataDevEntities())
{
rawData.Configuration.AutoDetectChangesEnabled = true;
using (var dataWareHouse = new IntranetDataWareHouseDevEntities())
{
dataWareHouse.Configuration.AutoDetectChangesEnabled = true;
...对数据进行一些操作 - 没有调用savechanges()。
// Save changes for all items.
if (!errors)
{
// First database save.
rawData.SaveChanges();
// Fake data to fail the second database save.
dataWareHouse.Tasks.Add(new PLKPIDashboards.DataWareHouse.Task()
{
Description = string.Empty,
Id = 0,
OperationsQueue = new OperationsQueue(),
Queue_key = 79,
TaskTypeSLAs = new Collection<TaskTypeSLA>(),
Tasktype = null
});
// Second database save.
dataWareHouse.SaveChanges();
scope.Complete();
}
else
{
scope.Dispose();
}
}
}
}
答案 0 :(得分:0)
从这篇文章http://blogs.msdn.com/b/alexj/archive/2009/01/11/savechanges-false.aspx
尝试使用
rawData.SaveChanges(false);
dataWareHouse.SaveChanges(false);
//if everything is ok
scope.Complete();
rawData.AcceptAllChanges();
dataWareHouse.AcceptAllChanges();