我制作了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" />
任何人都知道我可以尝试的解决方案,请告诉我。
由于
答案 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
(如果区分大小写,则可能是原因)。