Sqlite 实体框架核心ObjectDisposeException:“;“安全手柄已关闭”; 安装程序

Sqlite 实体框架核心ObjectDisposeException:“;“安全手柄已关闭”; 安装程序,sqlite,entity-framework-core,objectdisposedexception,Sqlite,Entity Framework Core,Objectdisposedexception,实体框架核心1.1 WPF应用程序.NET 4.5.2 问题是: 在sqlite数据库上运行查询时,有时会遇到此异常 发生System.ObjectDisposedException HResult=0x8013622 Message=安全句柄已关闭Source=mscorlib StackTrace: 在System.Runtime.InteropServices.SafeHandle.DangerousAddRef(布尔值)中& 成功)在 系统.StubHelpers.StubHelpers

实体框架核心1.1

WPF应用程序.NET 4.5.2

问题是: 在sqlite数据库上运行查询时,有时会遇到此异常

发生System.ObjectDisposedException HResult=0x8013622
Message=安全句柄已关闭Source=mscorlib StackTrace:
在System.Runtime.InteropServices.SafeHandle.DangerousAddRef(布尔值)中& 成功)在 系统.StubHelpers.StubHelpers.SafeHandledRef(安全手柄幻影, 布尔值(布尔值与成功值) Microsoft.Data.Sqlite.Interop.NativeMethods.Sqlite3\u Sqlite3.Sqlite3\u db\u文件名(Sqlite3Handle db,IntPtr zDbName)在 Microsoft.Data.Sqlite.Interop.NativeMethods.Sqlite3\u Sqlite3.db\u文件名(Sqlite3Handle db,IntPtr zDbName)在 Microsoft.Data.Sqlite.Interop.NativeMethods.sqlite3_db_文件名(Sqlite3Handle db,字符串zDbName)在 Microsoft.Data.Sqlite.Interop.VersionedMethods.Strategy3_7_10.GetFilename(Sqlite3Handle db,字符串zDbName)在 Microsoft.Data.Sqlite.Interop.VersionedMethods.GetFilename(Sqlite3Handle db,字符串zDbName)在 Microsoft.Data.Sqlite.SqliteConnection.get_DataSource()位于 Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Close()
在 Microsoft.EntityFrameworkCore.Storage.Internal.SqliteRelationalConnection.Close() 在 Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable.Enumerator.Dispose() 在 Microsoft.EntityFrameworkCore.Query.QueryMethodProvider.d_u3
1.MoveNext()
在System.Linq.Enumerable.where中选择EnumerableInterator
2.MoveNext()
在 Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor
1.EnumeratorExceptionInterceptor.MoveNext()
位于System.Collections.Generic.List
1..ctor(IEnumerable
1 collection)
在System.Linq.Enumerable.ToList[TSource](IEnumerable
1 source)处 FxConnection.Persistence.Repositories.PointNameRepository.GetConnectedDeviceTracking(PointName C:\Users*\documents\visual studio中的点名称) 2017\Projects\project\project\Persistence\Repositories\PointNameRepository.cs:line 357 at FxConnection.ViewModels.ProjectDeviceDatabaseViewModel.InitialLoading\u DoWork(对象 C:\Users*\documents\visual studio中的发件人,DoWorkEventArgs e) 2017\Projects\project\project\ViewModels\ProjectDeviceDatabaseViewModel.cs:line 1729在 System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventTargets e)
位于System.ComponentModel.BackgroundWorker.WorkerThreadStart(对象 (论据)

我在循环中运行的查询,在循环之前创建了一个新上下文

DatabaseContext.Devices.Load();
var deviceFrom =
    DatabaseContext.SocketSockets.AsNoTracking()
        .Include(i => i.SocketFrom)
        .Where(ss => ss.SocketTo.PointNameId == pointName.PointNameId)
        .Select(s => s.SocketFrom)
        .Where(s => s.IsConnected || s.IsSupplyOrGround == false)
        .Select(s => s.Device)
        .ToList();

var deviceTo =
    DatabaseContext.SocketSockets.AsNoTracking()
        .Include(i => i.SocketTo)
        .Where(ss => ss.SocketFrom.PointNameId == pointName.PointNameId)
        .Select(s => s.SocketTo)
        .Where(s => s.IsConnected || s.IsSupplyOrGround == false)
        .Select(s => s.Device)
        .ToList();
我想知道我是否以正确的方式进行了查询?因为有时候完全可能没有结果。这可能是个问题吗

此外,我的
SocketSocket
表基本上是一个包含
Socket
对的多对多映射

问题并非总是发生在同一地点,即使数据相同

  • 试图让多个上下文同时访问同一个sqlite数据库会导致此异常吗

看起来有多个BackgroundWorker正在运行。要详细说明@GertArnold的评论,并不是说您有多个上下文-多个并发查询上下文应该可以正常工作-但Entity Framework不支持使用相同的
DbContext
实例的并行或并发查询。请参见答案等。