本文转载自微信公众号「后端Q」,作者conan。转载本文请联系后端Q公众号。
可以使用 DbContext.Database API 开始、提交和回滚事务。 以下示例显示了在单个事务中执行的两个 SaveChanges 操作以及一个 LINQ 查询:
- using var context = new BloggingContext();
- using var transaction = context.Database.BeginTransaction();
- try
- {
- context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" });
- context.SaveChanges();
- context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/visualstudio" });
- context.SaveChanges();
- var blogs = context.Blogs
- .OrderBy(b => b.Url)
- .ToList();
- // Commit transaction if all commands succeed, transaction will auto-rollback
- // when disposed if either commands fails
- transaction.Commit();
- }
- catch (Exception)
- {
- // TODO: Handle failure
- }
虽然所有关系数据库提供程序都支持事务,但在调用事务 API 时,可能会引发其他提供程序类型或不执行任何操作。
如果需要跨较大作用域进行协调,则可以使用环境事务。
- using (var scope = new TransactionScope(
- TransactionScopeOption.Required,
- new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted }))
- {
- using var connection = new SqlConnection(connectionString);
- connection.Open();
- try
- {
- // Run raw ADO.NET command in the transaction
- var command = connection.CreateCommand();
- command.CommandText = "DELETE FROM dbo.Blogs";
- command.ExecuteNonQuery();
- // Run an EF Core command in the transaction
- var options = new DbContextOptionsBuilder<BloggingContext>()
- .UseSqlServer(connection)
- .Options;
- using (var context = new BloggingContext(options))
- {
- context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" });
- context.SaveChanges();
- }
- // Commit transaction if all commands succeed, transaction will auto-rollback
- // when disposed if either commands fails
- scope.Complete();
- }
- catch (Exception)
- {
- // TODO: Handle failure
- }
- }
还可以在显式事务中登记。
- using (var transaction = new CommittableTransaction(
- new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted }))
- {
- var connection = new SqlConnection(connectionString);
- try
- {
- var options = new DbContextOptionsBuilder<BloggingContext>()
- .UseSqlServer(connection)
- .Options;
- using (var context = new BloggingContext(options))
- {
- context.Database.OpenConnection();
- context.Database.EnlistTransaction(transaction);
- // Run raw ADO.NET command in the transaction
- var command = connection.CreateCommand();
- command.CommandText = "DELETE FROM dbo.Blogs";
- command.ExecuteNonQuery();
- // Run an EF Core command in the transaction
- context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" });
- context.SaveChanges();
- context.Database.CloseConnection();
- }
- // Commit transaction if all commands succeed, transaction will auto-rollback
- // when disposed if either commands fails
- transaction.Commit();
- }
- catch (Exception)
- {
- // TODO: Handle failure
- }
- }
本文转载自微信公众号「HelloGitHub」,作者HelloGitHub。转载本文请联系HelloGi...
本文转载自微信公众号「菜鸟飞呀飞」,作者刘进坤。转载本文请联系菜鸟飞呀飞公...
TOP云 (west.cn)3月2日消息,昨天早上sedo平台经纪人Frank Tillmanns在脸书上...
Topic Topic是一类消息的集合,是一种逻辑上的分区。为什么说是逻辑分区呢?因为...
分布式应用运行时Dapr目前已经发布了1.1.0版本,阿里云也在积极地为Dapr贡献代码...
转载自 https://github.com/maemual/raft-zh_cn/blob/master/raft-zh_cn.md 1 介...
1.考历史的时候,我莫名的有一种沉重感,因为我就要改变历史了。 2.女人是书,...
本文转载自微信公众号「五分钟学大数据」,作者园陌 。转载本文请联系五分钟学大...
云服务器是否有图形界面? CentOS 6系列弹性云服务器如何安装图形化界面? CentO...
XSS 攻击 xxs 攻击英文全称是 Croess SiteScripting ,意思就是跨站脚本攻击。是...