C# 确定LINQ语句的范围,并在DB上下文中使用
我有一个函数,它返回查询结果以进行进一步筛选,如下所示:C# 确定LINQ语句的范围,并在DB上下文中使用,c#,entity-framework,linq,entity-framework-6,c#-7.0,C#,Entity Framework,Linq,Entity Framework 6,C# 7.0,我有一个函数,它返回查询结果以进行进一步筛选,如下所示: public IQueryable<MyData> Query(string name) { using (var dbc = new MyDbContext()) return dbc.MyData.Where(v => v.Name == name); } 在这种情况下,MyDbContext的范围是什么?什么时候处理?当Query()返回或f()中的ToList()完成时 如果是前者,我如何更改它,
public IQueryable<MyData> Query(string name) {
using (var dbc = new MyDbContext())
return dbc.MyData.Where(v => v.Name == name);
}
在这种情况下,MyDbContext
的范围是什么?什么时候处理?当Query()
返回或f()中的ToList()
完成时
如果是前者,我如何更改它,以便在ToList()
完成时释放DB上下文
(注意:我知道在EF中通常不需要使用Abround DbContext,但我希望在这种情况下使用它,因为我正在尝试解决sqlite锁定问题)
谢谢 那么,使用
子句只是一个try finally
块。因此,Query
将被转换为如下内容:
public IQueryable<MyData> Query(string name) {
MyDbContext dbc;
dbc = new MyDbContext();
try
{
return dbc.MyData.Where(v => v.Name == name);
}
finally
{
dbc.Dispose();
}
}
总体思路很简单,建议不要将事情过于复杂:
创建dbcontext
用它做任何你需要做的事
处理它
public IQueryable<MyData> Query(string name) {
MyDbContext dbc;
dbc = new MyDbContext();
try
{
return dbc.MyData.Where(v => v.Name == name);
}
finally
{
dbc.Dispose();
}
}
public IQueryable<MyData> Query(MyDbContext dbc, string name) {
return dbc.MyData.Where(v => v.Name == name);
}
public f() {
using(var dbc = new MyDbContext())
{
var res = Query(dbc, "john").Select(v => ......
var resList = res.ToList();
...
}
}