1

Entity Framework 5.0 を使用する Asp.Net MVC 4 プロジェクトがあります。

Threadpool スレッドから EF コードを実行すると、何らかの理由で DefaultConnectionFactory が呼び出されません。

Asp.Net MVC プロジェクトの Application_Start イベントで接続ファクトリをセットアップします。

Database.DefaultConnectionFactory = new WebConnectionFactory();

これは、これまでのところすべてのデータ アクセス コードで正常に実行されます。

いくつかの EF コードを呼び出す Parallel.ForEach ループがあります。何らかの理由で、呼び出されたときに DefaultConnectionFactory がヒットすることはありません。このファクトリはコードの実行に不可欠であるため、呼び出しは失敗します (既定の接続文字列が使用されます)。

新しいスレッドで実行したときにこの DefaultConnectionFactory が呼び出されない理由はありますか?

4

1 に答える 1

0

使用する呼び出しごとに構築した接続を取得する必要があります。たとえば、次のコードを使用します。

private static void UsingCustomConnection()
{
    using (var conn = Database.DefaultConnectionFactory.CreateConnection("YourDbName"))
    {
        using (var context = new YourContext(conn))
        {
            context.Destinations.Add(new Destination {Name = "Colorado"});
            context.SaveChanges();
        }
    }
}

これを YourContext でセットアップする必要があります

public YourContext(DbConnection connection)
    : base(connection, contextOwnsConnection: false)
{
}
于 2013-02-27T23:50:22.643 に答える