实体框架核心1.1
WPF应用程序.NET 4.5.2
我在sqlite数据库上运行查询时有时会遇到此异常。
发生System.ObjectDisposedException HResult = 0x80131622
Message =安全句柄已关闭Source = mscorlib StackTrace:
在System.Runtime.InteropServices.SafeHandle.DangerousAddRef(布尔& 成功) System.StubHelpers.StubHelpers.SafeHandleAddRef(SafeHandle pHandle, 布尔和放大器;成功) Microsoft.Data.Sqlite.Interop.NativeMethods.Sqlite3_sqlite3.sqlite3_db_filename(Sqlite3Handle db,IntPtr zDbName)at Microsoft.Data.Sqlite.Interop.NativeMethods.Sqlite3_sqlite3.db_filename(Sqlite3Handle db,IntPtr zDbName)at Microsoft.Data.Sqlite.Interop.NativeMethods.sqlite3_db_filename(Sqlite3Handle db,String zDbName)at Microsoft.Data.Sqlite.Interop.VersionedMethods.Strategy3_7_10.GetFilename(Sqlite3Handle db,String zDbName)at Microsoft.Data.Sqlite.Interop.VersionedMethods.GetFilename(Sqlite3Handle db,String zDbName)at Microsoft.Data.Sqlite.SqliteConnection.get_DataSource()at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Close()
在 Microsoft.EntityFrameworkCore.Storage.Internal.SqliteRelationalConnection.Close() 在 Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable.Enumerator.Dispose() 在 Microsoft.EntityFrameworkCore.Query.QueryMethodProvider< _ShapedQuery> d__31.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext()
在 Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor1.EnumeratorExceptionInterceptor.MoveNext() at System.Collections.Generic.List
1..ctor(IEnumerable1 collection)
1 source)at at FxConnection.Persistence.Repositories.PointNameRepository.GetConnectedDeviceNoTracking(PointName pointName)在C:\ Users * \ documents \ visual studio中 2017年\项目\项目\项目\持久性\库\ PointNameRepository.cs:行 357 at FxConnection.ViewModels.ProjectDeviceDatabaseViewModel.InitialLoading_DoWork(对象 发件人,DoWorkEventArgs e)在C:\ Users * \ documents \ visual studio中 2017年\项目\项目\项目\的ViewModels \ ProjectDeviceDatabaseViewModel.cs:行 1729年 System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
at System.Linq.Enumerable.ToList[TSource](IEnumerable
在System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object 参数)
我在循环中运行的查询,在循环之前创建了新的上下文。
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
对的多对多映射。
即使使用相同的数据,问题也不会一直发生在同一地点。