c# - DbContext "using"在一行中

标签 c# .net entity-framework lambda extension-methods

我发现自己经常这样做:

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/

相关文章:

c# - C# ExpressionVisitor 实现的动机是什么?

java - 从 java .war 文件创建 dll

c# - 你会不会有太多 "protected virtual"方法?

entity-framework - 对 SQL Server CE 4.0 数据库使用 EF 时出现 Azure 错误

entity-framework - EntityFramework 6.0 CreateDatabaseIfNotExists 代码在创建初始结构之前首先尝试迁移

c# - 尝试更新或删除商店中不存在的实体

c# - Linq 添加缺失的不同值

c# - 访问多对多表

c# - Nuget 不为弱命名程序集生成绑定(bind)重定向

c# - 创建一个 "over time"算法