. net如何处理使用上下文中的LINQ-To-Entity中的连接

本文关键字:上下文 连接 LINQ-To-Entity 何处理 处理 net | 更新日期: 2023-09-27 18:04:11

我在我的项目中使用Linq-To-Entity。但是,在某些情况下,我犹豫是否使用Stored ProcedureLINQ 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吗?

. net如何处理使用上下文中的LINQ-To-Entity中的连接

是否为每个查询打开一个新连接?

根据文档

当调用查询方法时,打开连接,并保持打开状态,直到objectreresult被完全使用或处置。

然而,连接是由。net 池化的,因此相同的连接对象将被重用(我假设在必要时重新打开)。

请注意,查询不执行,直到您枚举它(使用foreach, ToList, ToArray, Single, First等)。在此之前,只是一个查询。这意味着在上下文被处理之前,您必须对查询做一些操作,否则您将得到一个异常。

是否有任何情况下,我必须使用存储过程而不是LINQ?

如果您的查询太复杂而无法使用Linq来构造,那么存储过程是一个合理的选择。

在初始化新上下文时,在构造函数中执行此操作。

NorthwindEntities db = new NorthwindEntities();

LINQ在初始化上下文时打开连接。

NorthwindEntities db = new NorthwindEntities()

当您的context被处置时,它将被关闭。