core web api使用freesql:.net core web api+freesql-CSDN博客
事务:执行单个逻辑功能的一组操作称为事务。事务是一个最小的工作单元,不论执行成功与失败都作为一个整体进行工作。
- 事务的ACID特性:
- 原子性(Atomicity):事务的执行是作为原子的,即不可再分。整个语句作为一个不可再分的执行单元,要么都执行,要么都不执行。
- 一致性(Consistency):在事务开始之前和事务结束之后,所有的数据都保持一致状态。
- 隔离性(Isolation):事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。
- 持久性(Durability):事务完成之后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
使用情景:再添加数据的时候需要添加两张表中的数据,这时候就可以使用freesql的事务调用:
官网参照:
首先因为是两个实体类,所以创建一个类,用来放两个实体类中的添加的字段
使用事务进行添加的接口:
public async Task<bool> CreateAsync([FromBody] StudentScoreDto dto)
{
using Object<DbConnection> conn = freeSql.Ado.MasterPool.Get();
using DbTransaction transaction = conn.Value.BeginTransaction();
Student student = new Student() {
Sage=dto.Sage,
Sclacc=dto.Sclacc,
Sname=dto.Sname,
Spassword="123456",
Ssex=dto.Ssex
};
Score sc=new Score() {
Cname=dto.Sname,
Cscore=dto.Cscore,
Grantsc=dto.Grantsc,
SQLSERVER=dto.SQLSERVER
};
bool result = false;
try
{
await freeSql.Insert(student).WithTransaction(transaction).ExecuteAffrowsAsync();
await freeSql.Insert(sc).WithTransaction(transaction).ExecuteAffrowsAsync();
result = true;
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
result = true;
}
return result;
}
使用事务进行修改的接口(修改的时候的涉及的表必须要有主键)
public async Task<bool> updateAsync([FromBody] StudentScoreDto dto)
{
using Object<DbConnection> conn = freeSql.Ado.MasterPool.Get();
using DbTransaction transaction = conn.Value.BeginTransaction();
Student student = new Student()
{
Sage = dto.Sage,
Sclacc = dto.Sclacc,
Sname = dto.Sname,
Spassword = "123456",
Ssex = dto.Ssex
};
Score sc = new Score()
{
Cname = dto.Sname,
Cscore = dto.Cscore,
Grantsc = dto.Grantsc,
SQLSERVER = dto.SQLSERVER
};
bool result = false;
try
{
int a = await freeSql.Update<Models.Student>().SetSource(student).WithTransaction(transaction).ExecuteAffrowsAsync();
int bb = await freeSql.Update<Models.Score>().SetSource(sc).WithTransaction(transaction).ExecuteAffrowsAsync();
result = true;
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
result = true;
}
return result;
}
使用事务进行删除的接口
public async Task<bool> deleteAsync(string name)
{
using Object<DbConnection> conn = freeSql.Ado.MasterPool.Get();
using DbTransaction transaction = conn.Value.BeginTransaction();
bool result = false;
try
{
await freeSql.Delete<Models.Score>().Where(c => c.Cname == name).WithTransaction(transaction).ExecuteAffrowsAsync();
await freeSql.Delete<Models.Student>().Where(a=>a.Sname==name).WithTransaction(transaction).ExecuteAffrowsAsync();
result = true;
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
result = true;
}
return result;
}
以上就是 core web api中使用freesql进行事务的使用