我发现自己经常这样做:

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

这些简单的案例会很好,例如:
return MyDbContext.Execute(db => db.Users);

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

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

最佳答案

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

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);

IIRC,您可能还想在处理 DbContext 之前在每个对象上调用 Detach 或其他东西。但是你明白了。

关于c# - DbContext "using"在一行中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12152955/

10-12 19:11