底层提供程序在Open上失败

时间:2012-09-18 21:01:54

标签: asp.net entity-framework

我制作了3个Ajax进程来同时运行下面的代码。 但是其中一个进程抛出了异常,消息显示“底层提供程序在Open上失败。”

try{
    orderRepository orderRepo = new orderRepository(); // get context (Mysql)

    var result = (from x in orderRepo.orders
          where x.orderid == orderno
          select new {x.tracking, x.status, x.charged }).SingleOrDefault();

    charged = result.charged;
}catch(Exception e){
    log.Error(e.Message); //    The underlying provider failed on Open.
} 

并且,我运行之前失败的1 Ajax调用,然后它通过。

它发生在3个(Ajax)进程中的1个,有时是5个进程中的2个。

我猜是因为所有进程都尝试同时使用Database。但我找不到解决方案。

这是我的连接字符串,

<add name="EFMysqlContext" connectionString="server=10.0.0.10;User Id=root;pwd=xxxx;Persist Security Info=True;database=shop_db" providerName="Mysql.Data.MySqlClient" />

任何人都知道我可以尝试的解决方案,请告诉我。

由于

2 个答案:

答案 0 :(得分:0)

这听起来像是一个问题,因为使用相同的用户名与SQL Server并发连接。您是否尝试在使用后销毁/处置存储库(或连接)对象? 试一试:

 try{
       using( orderRepository orderRepo = new orderRepository()) // get context (Mysql)
        {
          var result = (from x in orderRepo.orders
              where x.orderid == orderno
              select new {x.tracking, x.status, x.charged }).SingleOrDefault();

        charged = result.charged;
    } // orderRepo object automatically gets disposed here
catch(Exception e){
        log.Error(e.Message); //    The underlying provider failed on Open.
    } }

答案 1 :(得分:0)

不确定是否重要,但您的提供商名称为Mysql.Data.MySqlClient而非MySql.Data.MySqlClient(如果区分大小写,则可能是原因)。