DotNetNext / SqlSugar

.Net aot ORM Fastest ORM Simple Easy VB.NET Sqlite orm Oracle ORM Mysql Orm 虚谷数据库 postgresql ORm SqlServer oRm 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET5 ORM .NET6 ORM ClickHouse orm QuestDb ,TDengine ORM,OceanBase orm,GaussDB orm ,Tidb orm Object/Relational Mapping
https://www.donet5.com/Home/Doc
MIT License
5.35k stars 1.34k forks source link

多线程同步时 CallContext.LogicalSetData,在UnitTest时,对象无法使用 #952

Closed heyunxu closed 3 years ago

heyunxu commented 3 years ago

您好,使用的是VS2019, 在ASP.NET时,我将SqlSugarClient使用CallContext.LogicalSetData保存,确保上下文唯一,正常情况可以使用,但是当我尝试UnitTest单元测试时,只要调用CallContext.LogicalSetData方法保存SqlSugarClient对象,就会导致SqlSugarClient对象无法使用。

出现的错误如图:

微信图片_20210819184821

但是我使用CallContext.SetData时,不会发生这个错误。

DotNetNext commented 3 years ago

CallContext.LogicalSetData 只能是单线程共享,sqlsugarclient不是线程安全对象 所以不同的线程需要new出新对象, 建议使用 SqlSugarScope

DotNetNext commented 3 years ago

SqlSugarScope 是线程安全对象 支持单例和上下文共享

DotNetNext commented 3 years ago

单例模式下 CallContext.LogicalSetData 都可以不用了

heyunxu commented 3 years ago

CallContext.LogicalSetData 只能是单线程共享,sqlsugarclient不是线程安全对象 所以不同的线程需要new出新对象, 建议使用 SqlSugarScope

LogicalSetData 不是会共享到当前线程和自己的子线程么?

heyunxu commented 3 years ago

CallContext.LogicalSetData 只能是单线程共享,sqlsugarclient不是线程安全对象 所以不同的线程需要new出新对象, 建议使用 SqlSugarScope

谢谢您的回复。感谢。