我的数据库中有一个名为devices的表,EF在我的项目中创建了该表的模型。我有一个称为元素的字符串列表,我需要通过该元素进行循环异步并进行检查,然后根据结果更新devices对象的属性,在每次迭代开始时,在准备好我需要的device对象之后,我会创建一个新的device模型实例查询数据库中的我的设备表以拥有相同元素的所有记录,然后基于新对象更新所有记录。当我尝试查询数据库中的设备表时,我收到此异常
System.InvalidOperationException:'在创建模型时无法使用上下文。如果在OnModelCreating方法内部使用上下文,或者多个线程同时访问同一上下文实例,则可能引发此异常。请注意,不能保证DbContext和相关类的实例成员是线程安全的。'
这是我的代码流
import os
import numpy as np
from netCDF4 import Dataset
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
... #ncdump, this is from a file in my computer
#variables for map in array form
wind_speed_array =nc_fid.variables['wind_speed_alt']
lats=nc_fid.variables['lat'][:]
lons =nc_fid.variables['lon'][:]
fig = plt.figure()
fig.autofmt_xdate()
m = Basemap(projection='mill',resolution='l')
m.drawcoastlines()
m.drawcountries()
plt.title("time series plot: wind speed")
x,y=m(lons,lats)
cs=m.scatter(x,y,wind_speed_array,color='blue')
plt.show()
答案 0 :(得分:2)
DbContext不是线程安全的。它使用到数据库的单个连接,并且您不应该从多个线程访问单个连接实例(特殊类型的连接有例外,但是最好假设您不应该也不要)。
要并行化对数据库的调用,您需要在Parallel.ForEach
的主体中创建一个新的DbContext实例。