dotnetcore / dotnetcore/FreeSql

使用freesql.Transaction事物时 如果是数据库抛出异常则当前整个事务无效并且try也无法拦截,如果是自己手动抛出则可以拦截

Open
#2,109 7 comments 0 reactions 0 assignees View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.