2013-01-04 20 views
1

我有一个使用Entity Framework 5.0的Asp.Net MVC 4项目。在线程池线程上执行时未使用数据库DefaultConnectionFactory

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

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

Database.DefaultConnectionFactory = new WebConnectionFactory(); 

这成功地运行在所有的数据访问代码为止。

我有一个调用一些EF代码的Parallel.ForEach循环。出于某种原因,DefaultConnectionFactory在被调用时从未被命中。这个工厂对我的代码执行很重要,所以调用失败(它使用它的默认连接字符串)。

任何想法为什么这个DefaultConnectionFactory不会在新线程上运行时被调用?

+0

_The DefaultConnectionFactory是从来没有击中时called_ - 你的意思是'CreateConnection'在'WebConnectionFactory'永远不会打? –

+0

是的,这是正确的。我可以看到一个断点永远不会被命中,并且从配置中的默认连接字符串看上去内容被填充。 – gavins

回答

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) 
{ 
} 
+0

也可以找到更多的信息[这里](http://stackoverflow.com/questions/13724807/entity-framework-defaultconnectionfactory-being-igning/15124821#15124821) – JabberwockyDecompiler