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