DbContext"使用"在一行中

lam*_*tor 4 .net c# lambda extension-methods entity-framework

我发现自己做了很多这样的事情:

using(var db = new MyDbContext())
{
  return db.Users.ToList(); // or some other simple query
}
Run Code Online (Sandbox Code Playgroud)

对于这些简单的情况,这将是很好的事情,如:

return MyDbContext.Execute(db => db.Users);
Run Code Online (Sandbox Code Playgroud)

但我不确定如何进行扩展方法.理想情况下(我认为)它需要一个DbContext(所以我可以重用代码)并返回模板化的IList ..但这可能吗?

当然,如果已经有一种方法可以做到这一点,我很乐意听到它.

Chr*_*ain 5

你可以为此编写最简单的静态类.您不需要扩展方法,因为这需要一个实例(并且根据示例中的语法,您还没有):

public static class MyDbContextStatic { 
    public static T Execute(Func<MyDbContext, T> f) {
        using (var db = new MyDbContext())
            return f(db);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用:

var users = MyDbContextStatic.Execute(db => db.Users);
Run Code Online (Sandbox Code Playgroud)

在处理DbContext之前,您可能希望在每个对象上调用Detach或其他内容.但是你明白了.