使用实体框架C限制与数据库的连接#

问题描述:

我有一个限制为60个并发连接的Azure数据库。我的问题是,我有几个爬虫,填充这个数据库,供我们的网站使用实体框架使用。使用实体框架C限制与数据库的连接#

对于多个爬虫来说,耗尽所有连接和错误并不需要很长时间。我已经尝试在连接字符串中设置最大池大小值,但这似乎没有对实际数据库连接施加任何限制。

我可以用单身包装DbContext,但我会限制整个爬虫到一个连接。

还有其他方法可以实现吗?

+0

您使用的是什么版本的EF?结合你的连接字符串中的'Max Pool Size = 60;',你是否设置了'Pooling = true;'? *(尽管如此,“真实”应该是默认设置)* –

+0

完成之后,您是否未释放连接? –

+0

@GeoffJames是Pooling设置为true。我曾尝试设置最大池大小= 1;看看我是否可以限制连接。尽管如此,它仍然会产生更多的连接。我目前使用EF 6.1.3。我尝试过Core,但按问题分组使其完全无法使用。 – mscard02

您试图限制对共享资源的并发访问。通常一个Semaphore用于此。

要做到这一点对一个盒子或单一的应用程序,如果客户在不同的机器上运行的天然场所放置信号将是SQL Server本身,你可以使用Semaphore or SemaphoreSlim

不过。请参阅this article以了解实现它的一种方式。在使用DbContext访问数据库之前,应用程序需要调用proc来获取锁定。信号量限制将需要59以保持读取信号量的一个连接。