在ASP.NET Core 6中,EF Core默认支持分布式事务。下面是一个使用ASP.NET Core 6和EF Core的代码示例:
首先,确保你的项目引用了以下NuGet包:
然后,在Startup.cs文件中配置数据库上下文和连接字符串:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
// ...
}
接下来,创建一个数据库上下文类:
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions options)
: base(options)
{
}
public DbSet Customers { get; set; }
public DbSet Orders { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// 配置实体关系等
}
}
然后,在你的控制器或服务中注入数据库上下文:
private readonly ApplicationDbContext _dbContext;
public MyService(ApplicationDbContext dbContext)
{
_dbContext = dbContext;
}
最后,你可以在事务中执行数据库操作:
using var transaction = await _dbContext.Database.BeginTransactionAsync();
try
{
// 在事务中执行数据库操作
var customer = new Customer { Name = "John Doe" };
_dbContext.Customers.Add(customer);
await _dbContext.SaveChangesAsync();
var order = new Order { CustomerId = customer.Id, TotalAmount = 100 };
_dbContext.Orders.Add(order);
await _dbContext.SaveChangesAsync();
await transaction.CommitAsync();
}
catch (Exception)
{
await transaction.RollbackAsync();
throw;
}
在以上示例中,我们使用Database.BeginTransactionAsync()
方法来启动一个新的数据库事务。在事务中执行的所有数据库操作都将在一个事务中进行,并且可以使用CommitAsync()
方法提交事务,或使用RollbackAsync()
方法回滚事务。
注意,这只是一个简单的示例,你可能还需要处理其他错误情况,如并发冲突等。
希望以上示例能帮助到你。