有没有人知道如何在Entity Framework 7中创建显式事务?所有我找到的信息都是关于EF 6版本的。文档也非常不完整,所以有没有人能提供一个例子呢?
我有一个dbContext,必须删除一个实体及其相关对象,然后再次插入它们,但在同一事务中,这样我就始终拥有行的“版本”。
有没有人知道如何在Entity Framework 7中创建显式事务?所有我找到的信息都是关于EF 6版本的。文档也非常不完整,所以有没有人能提供一个例子呢?
我有一个dbContext,必须删除一个实体及其相关对象,然后再次插入它们,但在同一事务中,这样我就始终拥有行的“版本”。
EF7的事务功能只包含在RC1及以上版本中(请参见此声明)。调用.SaveChanges()
(或.SaveChangesAsync()
)应该使用自动事务。然后,我认为在此之前需要将某些实体的项目标记为已删除状态。
可以通过将一些对数据库的操作放入代码块中来显式地启动事务,例如:
using (context.Database.BeginTransaction()) {
/*do something*/
}
事务将通过在using
块的结尾调用.Dispose()
来提交。也可以选择使用
using (var transaction = await context.Database.BeginTransactionAsync()) {
/*do something*/
/*one can call
transaction.Rollback() or transaction.Commit()
explicitly in the code */
}
它通常应该看起来像Entity Framework之前的版本。参见这篇文章作为例子。
dbContext
或者DbCommand
吗?通常情况下,应该使用using (context.Database.BeginTransaction()) {.../*do something*/...}
,但也可以使用await context.Database.BeginTransactionAsync()
。你可以使用using (var transaction = context.Database.BeginTransaction()) {...}
并显式调用transaction.Commit()
来提交事务,或者调用transaction.Rollback()
进行回滚。还有更多奇特的 EnlistTransaction。 - Oleg