. net如何处理使用上下文中的LINQ-To-Entity中的连接
本文关键字:上下文 连接 LINQ-To-Entity 何处理 处理 net | 更新日期: 2023-09-27 18:04:11
我在我的项目中使用Linq-To-Entity。但是,在某些情况下,我犹豫是否使用Stored Procedure
或LINQ to Table or View
。但是,我通常更喜欢使用LINQ,因为语法很好。我搜索了谷歌,但没有找到我问题的详细答案。
让我们考虑下面的代码:
using (NorthwindEntities db = new NorthwindEntities())
{
var custs = from c in db.Customers where c.City == "London" select c;
var edus = from c in db.Educations where c.Education != "2" select c;
// ... and so on
}
问题:
1. 它是否为每个查询打开一个新连接?如果是这样,那么不建议单独使用上述查询?
2. 另外,你能告诉我,在某些情况下,我必须使用存储过程而不是LINQ吗?
是否为每个查询打开一个新连接?
。
根据文档
当调用查询方法时,打开连接,并保持打开状态,直到objectreresult被完全使用或处置。
然而,连接是由。net 池化的,因此相同的连接对象将被重用(我假设在必要时重新打开)。
请注意,查询不执行,直到您枚举它(使用foreach
, ToList
, ToArray
, Single
, First
等)。在此之前,只是一个查询。这意味着在上下文被处理之前,您必须对查询做一些操作,否则您将得到一个异常。
是否有任何情况下,我必须使用存储过程而不是LINQ?
如果您的查询太复杂而无法使用Linq来构造,那么存储过程是一个合理的选择。
在初始化新上下文时,在构造函数中执行此操作。
NorthwindEntities db = new NorthwindEntities();
LINQ
在初始化上下文时打开连接。
NorthwindEntities db = new NorthwindEntities()
当您的context
被处置时,它将被关闭。