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字进行收取费用」许可协议进行许可。

posted @   重庆熊猫  阅读(369)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示