1

我有一个使用 Entity Framework 5.0 的 Asp.Net MVC 4 项目。

由于某种原因,当我从 Threadpool 线程执行 EF 代码时,没有调用我的 DefaultConnectionFactory。

我在我的 Asp.Net MVC 项目的 Application_Start 事件中设置了我的连接工厂:

Database.DefaultConnectionFactory = new WebConnectionFactory();

到目前为止,这在所有数据访问代码上都成功运行。

我有一个 Parallel.ForEach 循环调用一些 EF 代码。出于某种原因,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 回答