我发现自己做了很多这样的事情:
using(var db = new MyDbContext())
{
return db.Users.ToList(); // or some other simple query
}
对于这些简单的案例会很好:
return MyDbContext.Execute(db => db.Users);
但我不确定如何进行扩展方法。理想情况下(我认为)它需要一个DbContext(所以我可以重用代码)并返回模板化的IList ..但这可能吗?
当然,如果已经有一种方法可以做到这一点,我很乐意听到它......
答案 0 :(得分:5)
您可以为此编写最简单的静态类。您不需要扩展方法,因为这需要一个实例(并且基于示例中的语法,您还没有):
public static class MyDbContextStatic {
public static T Execute(Func<MyDbContext, T> f) {
using (var db = new MyDbContext())
return f(db);
}
}
使用:
var users = MyDbContextStatic.Execute(db => db.Users);
答案 1 :(得分:2)
您的第一个示例是正确的方法,它确保在块结束后调用Dispose
,这将导致连接关闭。您可能会使用扩展方法来完成您的工作,但它需要您在内存中引用DbContext
静态DbContext
。
关于数据库连接,您应该尽可能晚地打开它们并尽早关闭。
答案 2 :(得分:0)
DbContext为您管理基础连接 您可以调用Dispose,但在大多数常见情况下您都不需要。
http://blog.jongallant.com/2012/10/do-i-have-to-call-dispose-on-dbcontext.html