知道EF不是线程安全的,我为每个线程实例化一个实体上下文.
1-安全吗?
这似乎就像我在这些帖子中看到的那样:
Entity Framework + Multiple Threads + Lazy Load
Is it safe to use one Entity Framework Context per thread? … yes? how?
2 – 在创建我的上下文时有一个例外,但只有一次在3中,我无法找到原因.
这是我创建上下文的代码:
public partial class EntitIEs{ private static EntitIEs mfgEntitIEs = new EntitIEs(); private static Readonly Dictionary<int,EntitIEs> threadcontexts = new Dictionary<int,EntitIEs>(); public static EntitIEs Context { get { if (httpContext.Current != null) { string objectContextKey = httpContext.Current.GetHashCode().ToString("x"); if (!httpContext.Current.Items.Contains(objectContextKey)) { httpContext.Current.Items.Add(objectContextKey,new EntitIEs()); } return httpContext.Current.Items[objectContextKey] as EntitIEs; } else { int threadID = Thread.CurrentThread.ManagedThreadID; if (!threadcontexts.ContainsKey(threadID)) { try { threadcontexts.Add(threadID,new EntitIEs()); } catch (Exception ex) { throw new Exception("Erreur lors de la création de l'entity context"); } } return threadcontexts[threadID]; } return mfgEntitIEs; } }}
它在行上抛出NullReferenceException:
threadcontexts.Add(threadID,new EntitIEs());
而threadcontexts,threadID和新实体不为空.
谢谢你的帮助.
解决方法 你应该使用ConcurrentDictionary
for threadcontexts. 更好的甚至:找到一种方法来捕获线程中的上下文实例,例如执行parallel tasks:
var task1 = new Task(() => <your method that instantiates a context>));总结
以上是内存溢出为你收集整理的c# – 具有实体框架和多线程的NullReferenceException全部内容,希望文章能够帮你解决c# – 具有实体框架和多线程的NullReferenceException所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)