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

Far*_*yev 3 c# linq entity-framework

我在我的项目中使用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
}
Run Code Online (Sandbox Code Playgroud)

问题:
1.它是否为每个查询打开一个新连接?如果是,那么不建议单独使用上述查询?
2.另外,你能否告诉我有什么情况我必须使用存储过程而不是LINQ?

D S*_*ley 5

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

有点.

根据文件

调用查询方法时,将打开连接,并且它将保持打开状态,直到完全使用或丢弃ObjectResult.

但是,连接由.NET 汇集,因此将重用相同的连接对象(我假设必要时重新打开).

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

在任何情况下我都必须使用存储过程而不是LINQ吗?

如果您的查询过于复杂而无法使用Linq构建,则存储过程是一种合理的替代方法.