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

时间:2016-08-03 13:54:49

标签: c# asp.net-mvc entity-framework connection-string azure-sql-database

我有一个Azure数据库,限制为60个并发连接。我的问题是我有几个爬虫填充这个数据库,供我们的网站使用Entity Framework使用。

多个抓取工具不会耗尽所有连接和错误。我已尝试在连接字符串中设置max pool size值,但这似乎并未对实际数据库连接强制实施任何限制。

我可以将DbContext包装成单例,但是我会将整个爬虫限制为单个连接。

还有其他方法可以达到这个目的吗?

1 个答案:

答案 0 :(得分:4)

您正尝试限制对共享资源的并发访问。通常会使用Semaphore

要在单个框或单个应用中执行此操作,您可以使用Semaphore or SemaphoreSlim

但是,如果客户端在不同的盒子上运行,则放置信号量的自然位置将是SQL Server本身。有关实现它的一种方法,请参阅this article。在使用DbContext访问数据库之前,应用程序需要调用proc来获取锁。信号量限制需要为59才能保持一个连接以读取信号量。