单线程应用程序中的实体框架数据库连接

时间:2017-11-01 21:13:05

标签: c# asp.net entity-framework

我有一个独特的(或者我认为)问题 - 我们有一个使用MVC原则的ASP.NET Web应用程序。该项目最多是单线程(我们的业务需要单点控制)。我们正在使用Entity Framework连接到数据库

问题:

我们想要比每个页面加载更频繁地查询我们的数据库。

我已经考虑过把我们的数据库连接放在一个单独的连接中,但我担心连接很少 - 如果它在很久以前连接的话,查询是否仍然可以工作?您如何建议连接数据库?

2 个答案:

答案 0 :(得分:4)

  

您如何建议连接数据库?

请勿使用共享连接。连接不是线程安全的,并且由.NET汇集,因此创建一个通常不是一个昂贵的操作。

最佳做法是为每个数据库请求创建命令和连接。如果您正在使用Entity Framework,那么这将为您服务。

如果您想使用内置的SessionCache属性缓存结果,那么这样可以,但不要一次性缓存连接,EF上下文等资源

如果在某些时候您发现您的可衡量的性能问题与创建连接或上下文直接相关,那么您可以尝试处理它,但不要&#39 ; t尝试优化甚至可能不是问题的东西。

答案 1 :(得分:0)

如果你想在不连接数据库的情况下获取数据,你需要将其缓存 - 无论是在内存中,文件中还是在你想要的任何存储空间中,你都需要以某种方式将它保存在数据库前面。我不知道其他任何方式。

如果通过连接意味着为您的数据库构建一个全新的SqlConnection,那么您可以依赖连接池(即使您完成业务后,EF也足够智能,可以让您的连接保持活动几分钟),或者您可以创建通过不立即关闭它们(即在结构内跟踪它们),将它们保持在应用程序内部。

但你绝对应该考虑这是否真的是你想要的。 EF在内部执行的方式大部分时间都是您想要的。

进一步阅读: https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application