dotnetcore / dotnetcore/FreeSql
使用freesql.Transaction事物时 如果是数据库抛出异常则当前整个事务无效并且try也无法拦截,如果是自己手动抛出则可以拦截
- Dominant language
- C#
- Stars
- 4.4k
- Forks
- 910
- PR merge metrics
- No merged PRs in 30d
Description
如题
#### 问题描述及重现代码:
```c#
try
{
freeSqlObj.Transaction(() => {
var rows = freeSqlObj.Update()
.SetDto(new { code = "1111" })
.Where(x => x.Id == 1)
.ExecuteAffrows();
//if (rows <= 0)
// throw new Exception("11111");
Console.WriteLine($"数据库影响行数:{rows}!");
try
{
rows = freeSqlObj.Update()
.SetDto(new { code = Guid.NewGuid().ToString("N") })//(string)null
.Where(x => x.Id == 1)
.ExecuteAffrows();
if (rows <= 0)
throw new Exception("11111"); //这个异常可以拦截 并不影响上一句话
Console.WriteLine($"数据库影响行数:{rows}!");
rows = freeSqlObj.Update()
.SetDto(new { code = (string)null })//这个值数据库不能为空,这里数据库抛出异常 拦截后 会导致整个事务回滚 try拦截无效
.Where(x => x.Id == 1)
.ExecuteAffrows();
Console.WriteLine($"数据库影响行数:{rows}!");
}
catch (Exception e)
{
Console.WriteLine("数据库异常!");
}
rows = freeSqlObj.Update()
.SetDto(new { code = Guid.NewGuid().ToString("N") })
.Where(x => x.Id == 1)
.ExecuteAffrows();
Console.WriteLine($"数据库影响行数:{rows}!");
});
}
catch (Exception e)
{
Console.WriteLine($"数据库执行:{e.Message}!");
}
```
#### 数据库版本
sql server 2012 sp1
#### 安装的Nuget包
FreeSql.All V 3.5.213
#### .net framework/. net core? 及具体版本
. net 8.0
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.