VictorTzeng / Zxw.Framework.NetCore.Demo

Demo for the Zxw.Framework.NetCore repository.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

System.Data.SqlClient.SqlException:“不允许启动新事务,因为有其他线程正在该会话中运行。”

Run2948 opened this issue · comments

在执行Home/Init初始化菜单数据报错:

if (string.IsNullOrEmpty(entry.Entity.ParentId))
                {
                    entry.Entity.MenuPath = entry.Entity.Id;
                }
                else
                {
                    var parentMenu = service.GetSingle(entry.Entity.ParentId);
                    if (string.IsNullOrEmpty(parentMenu?.MenuPath))
                    {
                        entry.Entity.MenuPath = entry.Entity.Id;
                    }
                    else
                    {
                        entry.Entity.MenuPath = parentMenu.MenuPath + "," + entry.Entity.Id;
                    }
                }
                service.Update(entry.Entity, false, "MenuPath");

System.Data.SqlClient.SqlException:“不允许启动新事务,因为有其他线程正在该会话中运行。”
System.Data.SqlClient.SqlException (0x80131904): 不允许启动新事务,因为有其他线程正在该会话中运行。
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest)
at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest, String transactionName, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest)
at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction(TransactionRequest transactionRequest, String name, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest)
at System.Data.SqlClient.SqlInternalConnection.BeginSqlTransaction(IsolationLevel iso, String transactionName, Boolean shouldReconnect)
at System.Data.SqlClient.SqlConnection.BeginTransaction(IsolationLevel iso, String transactionName)
at System.Data.SqlClient.SqlConnection.BeginDbTransaction(IsolationLevel isolationLevel)
at System.Data.Common.DbConnection.BeginTransaction(IsolationLevel isolationLevel)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.BeginTransactionWithNoPreconditions(IsolationLevel isolationLevel)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.BeginTransaction(IsolationLevel isolationLevel)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.BeginTransaction()
at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(DbContext _, ValueTuple2 parameters) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func3 operation, Func3 verifySucceeded) at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(IEnumerable1 commandBatches, IRelationalConnection connection)
at Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IReadOnlyList1 entries) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IReadOnlyList1 entriesToSave)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess)
at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess)
at Microsoft.EntityFrameworkCore.DbContext.SaveChanges()
at Zxw.Framework.NetCore.Repositories.BaseRepository2.Update(T model, Boolean withTrigger, String[] updateColumns) at Zxw.Framework.Website.Repositories.SysMenuRepository.AfterInserted(IInsertedEntry2 entry) in E:\C_Language\VS_2010\20190314\Zxw.Framework.NetCore.Demo\src\Zxw.Framework.Website.Repositories\SysMenuRepository.cs:line 53
at CoContra.CovariantAction1.Invoke(T arg) at EntityFrameworkCore.Triggers.TriggerInvoker1.RaiseTheAfterEvents(DbContext dbContext, IEnumerable1 afterEvents) at EntityFrameworkCore.Triggers.Extensions.SaveChangesWithTriggers(DbContext dbContext, Func2 baseSaveChanges, Boolean acceptAllChangesOnSuccess)
at Zxw.Framework.Website.Controllers.HomeController.InitSysMenus(String controllerAssemblyName) in E:\C_Language\VS_2010\20190314\Zxw.Framework.NetCore.Demo\src\Zxw.Framework.Website.Controllers\HomeController.cs:line 82
at Zxw.Framework.Website.Controllers.HomeController.Init(IOptions`1 options) in E:\C_Language\VS_2010\20190314\Zxw.Framework.NetCore.Demo\src\Zxw.Framework.Website.Controllers\HomeController.cs:line 48
at lambda_method(Closure , Object , Object[] )
at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextExceptionFilterAsync()
ClientConnectionId:a0ab6663-37af-4027-ba7f-a4306d631643
Error Number:3988,State:1,Class:16

commented

有修改代码不?用的什么数据库呢?

用的sql server 2012,没有修改代码的

我用的pgsql 初始化菜单也会出错~

commented

尴尬了,我本地操作PG是没问题的。

@JackGMChen1988 你是报什么错呢

这是错误1:
image

Npgsql.NpgsqlOperationInProgressException
HResult=0x80131509
Message=A command is already in progress:
SELECT CASE WHEN COUNT(*) = 0 THEN FALSE ELSE TRUE END
FROM information_schema.tables
WHERE table_type = 'BASE TABLE' AND table_schema NOT IN ('pg_catalog', 'information_schema')

Source=Npgsql
StackTrace:
at Npgsql.NpgsqlConnector.g__DoStartUserAction|186_0(<>c__DisplayClass186_0& )
at Npgsql.NpgsqlConnector.StartUserAction(ConnectorState newState, NpgsqlCommand command)
at Npgsql.NpgsqlCommand.d__100.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader()
at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary2 parameterValues) at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection connection, IReadOnlyDictionary2 parameterValues)
at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable1.Enumerator.BufferlessMoveNext(DbContext _, Boolean buffer) at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlExecutionStrategy.Execute[TState,TResult](TState state, Func3 operation, Func3 verifySucceeded) at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable1.Enumerator.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator1.GetCount(Boolean onlyIfCheap) at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ResultEnumerable1.GetEnumerator()
at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor1.EnumeratorExceptionInterceptor.MoveNext() at System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable1 source, Boolean& found)
at System.Linq.Enumerable.First[TSource](IEnumerable1 source) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass15_11.b__0(QueryContext qc)
at System.Linq.Queryable.Count[TSource](IQueryable1 source, Expression1 predicate)
at Zxw.Framework.Website.Controllers.HomeController.InitSysMenus(String controllerAssemblyName) in D:\open_source\Zxw.Framework.NetCore.Demo\src\Zxw.Framework.Website.Controllers\HomeController.cs:line 79
at Zxw.Framework.Website.Controllers.HomeController.Init(IOptions`1 options) in D:\open_source\Zxw.Framework.NetCore.Demo\src\Zxw.Framework.Website.Controllers\HomeController.cs:line 47
at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__12.MoveNext()

错误2:这个错误我猜测是不是你这边初始化菜单一直循环 批量更新数据 的时候没使用事物,导致上一次更新还没提交完成,下一次就又开始了~
image

System.InvalidOperationException
HResult=0x80131509
Message=Reset() called on connector with state Executing
Source=Npgsql
StackTrace:
at Npgsql.NpgsqlConnector.Reset()
at Npgsql.ConnectorPool.Release(NpgsqlConnector connector)
at Npgsql.NpgsqlConnection.Close(Boolean wasBroken)
at Npgsql.NpgsqlConnection.Dispose(Boolean disposing)
at System.ComponentModel.Component.Dispose()
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Dispose()
at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.Dispose()
at Microsoft.EntityFrameworkCore.DbContext.Dispose()
at Zxw.Framework.NetCore.Repositories.BaseRepository2.Dispose(Boolean disposing) at Zxw.Framework.Website.Repositories.SysMenuRepository.AfterInserted(IInsertedEntry2 entry) in D:\open_source\Zxw.Framework.NetCore.Demo\src\Zxw.Framework.Website.Repositories\SysMenuRepository.cs:line 55
at CoContra.CovariantAction1.Invoke(T arg) at EntityFrameworkCore.Triggers.TriggerInvoker1.RaiseTheAfterEvents(DbContext dbContext, IEnumerable1 afterEvents) at EntityFrameworkCore.Triggers.Extensions.SaveChangesWithTriggers(DbContext dbContext, Func2 baseSaveChanges, Boolean acceptAllChangesOnSuccess)
at Zxw.Framework.Website.Controllers.HomeController.InitSysMenus(String controllerAssemblyName) in D:\open_source\Zxw.Framework.NetCore.Demo\src\Zxw.Framework.Website.Controllers\HomeController.cs:line 81
at Zxw.Framework.Website.Controllers.HomeController.Init(IOptions`1 options) in D:\open_source\Zxw.Framework.NetCore.Demo\src\Zxw.Framework.Website.Controllers\HomeController.cs:line 47
at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__12.MoveNext()

commented

触发器这个功能是个坑,正计划取消......

第一个是触发器引发的?那第二个呢?

commented

木鸡,暂时还没遇到过,估计是数据库上下文生命周期的问题,下班回家再试试

要没可能是pg的版本问题,我这边net core 2.2 运行的~

commented

你是pg哪个版本呢,我本地是PG10

这是我的版本: PostgreSQL 10.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16), 64-bit,你运行环境是 netcore 2.2 ?

commented

那应该没问题啊,我本地2.2.104/105都OK

那就奇怪了,要不晚上你直接当新项目来试试,换个电脑或者目录。还有个小问题就是 Blueshift.EntityFrameworkCore.MongoDB.2.1.0-preview2-t007bc0fad 这个包nuget上没有了,需要去官网下载到本地配置才能安装~

commented

.......果然很Blueshift

还有就是你初始化菜单权限的做法很新颖,为啥不直接放SQL语句初始化?然后系统做功能添加菜单权限呢?你这样的做法有什么特别的原因或者优势吗?