在线程池线程上执行时未使用数据库DefaultConnectionFactory

时间:2013-01-04 02:56:58

标签: entity-framework

我有一个使用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的任何想法?

1 个答案:

答案 0 :(得分: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)
{
}