2012-05-09 6 views
4

Entity Frameworkを使用してParallel.ForEachループにデータを保存しています。 EFがスレッドセーフではないことを知って、私は各スレッドのエンティティコンテキストをインスタンス化します。Entity FrameworkとマルチスレッドでのNullReferenceException

1-安全ですか? 私がこれらの記事でご覧のように思える:

Entity Framework + Multiple Threads + Lazy Load

Is it safe to use one Entity Framework Context per thread? ... yes? how?

2-あり例外は私のコンテキストの作成中ですが、3のうち一つだけの時間と私ができます」理由を知ることはできません。

ThreadContexts.Add(threadId, new Entities()); 

そしてThreadContexts、スレッドIDと新しいエンティティがnullではありません:それはライン上とNullReferenceExceptionをスロー

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; 
     } 
    } 
} 

はここでコンテキストを作成する私のコードです。

ご協力いただきありがとうございます。

+0

それの後ろのデータベースは何ですか?それはオラクルですか? –

+0

その行にNullRef例外がスローされることはありません。デバッグシンボルでコンパイルしていますか?正しいスレッドの呼び出しスタックにブレークしていることを確かめますか? – Slugart

+0

これはSQLServerデータベースです。 – Leslie

答えて

1

あなたはThreadContextsためConcurrentDictionaryを使用する必要があります。

さらに良い方法:スレッド内でコンテキストインスタンスを取得する方法を見つける。実行することによってparallel tasks

var task1 = new Task(() => <your method that instantiates a context>)); 
関連する問題