.Net如何使用上下文处理LINQ-To-Entity中的连接?
我在我的项目中使用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的情况?
它是否为每个查询打开一个新连接?
有点。
根据文件
调用查询方法时,将打开连接,并且它将保持打开状态,直到完全使用或丢弃ObjectResult。
但是,连接由.NET 汇集 ,因此将重用相同的连接对象 (并且假设必要时重新打开)。
请注意,在您枚举查询之前不会执行查询(使用foreach
, ToList
, ToArray
, Single
, First
等)。 在那之前它只是一个查询 。 这意味着您必须在处理上下文之前对查询执行某些操作 ,否则您将获得exception。
是否有任何情况我必须使用存储过程而不是LINQ?
如果您的查询过于复杂而无法使用Linq构建,则存储过程是一种合理的替代方法。
在初始化新上下文时,它在构造函数中执行此操作。
NorthwindEntities db = new NorthwindEntities();
LINQ
在初始化上下文时打开连接。
NorthwindEntities db = new NorthwindEntities()
当你的context
被处理时它将被关闭。