Entity Framework教程-事务(Transaction)
更新记录
转载请注明出处:
2022年10月21日 发布。
2022年10月10日 从笔记迁移到博客。
EF中的事务说明#
EF支持开箱即用的事务,无需复杂的配置
默认事务(Default Transaction)#
只需要执行SaveChanges()一次,将会自动执行事务
只在事务执行成功的情况下保存更改,否则事务将自动回滚
比如:
更改了多个Entity
只需要执行SaveChanges()一次就可以实现多个表的更新
如果执行失败,则全部回滚(rolled back automatically)
如果执行成功,则直接提交到数据库中(executed successfully)
手动事务(Creating a simple transaction)#
相关API#
开启事务#
使用EF上下文context对象的Database对象的BeginTransaction()方法
var transaction = Context.Database.BeginTransaction()
提交事务#
context.SaveChangesAsync(); //记得还是要保存修改哟
//提交事务
transaction.Commit();
transaction.CommitAsync();
回滚事务#
//回滚事务
transaction.Rollback();
transaction.RollbackAsync();
创建保存点#
//创建保存点
transaction.CreateSavepoint("Save1");
transaction.CreateSavepointAsync("Save1");
恢复到保存点#
//恢复到保存点
transaction.RollbackToSavepoint("Save1");
transaction.RollbackToSavepointAsync("Save1");
释放保存点#
//释放保存点
transaction.ReleaseSavepoint("Save1");
transaction.ReleaseSavepointAsync("Save1");
检测是否支持保存点功能#
//检测是否支持保存点功能
if(transaction.SupportsSavepoints)
{
Console.WriteLine("Support Savepoints");
}
else
{
Console.WriteLine("Not Support Savepoints");
}
获得事务的Id#
//获得事务的Id
Console.WriteLine(transaction.TransactionId);
使用using语句#
使用using语句的好处:自动控制事务执行失败回滚,无需手动设置回滚
using (var transaction = dbContext.Database.BeginTransaction())
{
//do something......
//提交事务
transaction.Commit();
transaction.CommitAsync();
}
自己把控提交和回滚#
using(PandaDbContext dbContext = new PandaDbContext())
{
var transaction = dbContext.Database.BeginTransaction();
try
{
//do something......
//执行成功,提交事务
transaction.Commit();
transaction.CommitAsync();
}
catch(Exception e)
{
Console.WriteLine(e.Message);
//执行失败,进行回滚
transaction.Rollback();
}
finally
{
transaction = null;
}
}
作者:重庆熊猫
出处:https://www.cnblogs.com/cqpanda/p/16797939.html
版权:本作品采用「不论是否商业使用都不允许转载,否则按3元1字进行收取费用」许可协议进行许可。
本文来自博客园,作者:重庆熊猫,转载请注明原文链接:https://www.cnblogs.com/cqpanda/p/16797939.html
Buy me a cup of coffee ☕.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现