FreeSql icon indicating copy to clipboard operation
FreeSql copied to clipboard

空引用 FreeSql.DbContext.Flush Command()\n at FreeSql.DbSet`1.DbContextFlushCommand

Open junjiecheng1 opened this issue 5 months ago • 3 comments

查询: {"ClassName":"Sys tem.NullReferenceException","Message":"Object reference not set to an instance of an object.","Data":null,"InnerException":null, "HelpURL":null,"StackTraceString":" at FreeSql.DbContext.Flush Command()\n at FreeSql.DbSet1.DbContextFlushCommand()\n at FreeSql.DbSet1.OrmSelect(Object dywhere)\n at FreeSql.Reposit oryDbSet1.OrmSelect(Object dywhere)\n at FreeSql.RepositoryDb Set1.OrmSelectInternal(Object dywhere)\n at FreeSql.BaseRepos itory`1.get_Select()\n at。。。

修改: {"ClassName":"System.InvalidOperationException" ,"Message":"Queue empty.","Data":null,"InnerException":null,"Hel pURL":null,"StackTraceString":" at System.Collections.Generic. Queue1.ThrowForEmptyQueue()\n at System.Collections.Generic.Q ueue1.Dequeue()\n at FreeSql.DbContext.FlushCommand()\n at FreeSql.RepositoryDbContext.SaveChanges()\n at FreeSql.BaseRep ository`1.Update(TEntity entity)\n at 。。。。 atsonBuckets":null}

问题描述及重现代码:

并发高的情况下,会发生空引用。 是DbContextFlushCommand 相关的。

c# code

Image

basic repository

Image

数据库版本

mysql 8.0

安装的Nuget包

Image

.net framework/. net core? 及具体版本

.net core 8.0

Image

junjiecheng1 avatar Jul 30 '25 06:07 junjiecheng1

Image 怀疑是并发场景下,每次select 都 DbContextFlushCommand导致的资源清空。 这块是不是根据 Transaction Isolation Level=ReadUncommitted 来作为判断,或者增加参数允许脏读更为合理 @2881099

24code avatar Jul 30 '25 12:07 24code

不用怀疑是并发,是肯定的。

同一个 DbContext 对象被并发使用了。

2881099 avatar Jul 30 '25 14:07 2881099

@24code DbContext 或 UnitOfWork 对象设计时就不支持线程并发。

2881099 avatar Jul 30 '25 14:07 2881099