2013-01-04 19 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