繁体   English   中英

将数据库上下文传递给静态方法

[英]Passing database context to static methods

我有一个带有一些静态列表的类。 出于示范目的,我只会展示两个:

public class Foo
{
    public static readonly List<long> FirstList(EfEntities dbContext)
    {
        return dbContext.SomeTable.Where(x => x == 1).ToList();
    }

    public static readonly List<long> SecondList(EfEntities dbContext)
    {
        return dbContext.SomeTable.Where(x => x == 2).ToList();
    }
}

我不是将数据库上下文传递给每个静态方法的忠实粉丝。 你对不同的方法有什么建议吗?

在这种情况下一个好主意(当然,如果架构证明静态方法的使用是合理的,但这似乎超出了这个问题的范围)可能会创建静态方法作为扩展方法

public static class EfEntitiesExtensions
{
    public static readonly List<long> FirstList(this EfEntities dbContext)
    {
        return dbContext.SomeTable.Where(x => x == 1).ToList();
    }

    public static readonly List<long> SecondList(this EfEntities dbContext)
    {
        return dbContext.SomeTable.Where(x => x == 2).ToList();
    }
}

之后你可以像这样打电话给他们:

...
EfEntities dbContext = new EfEntities();
List<long> firstList = dbContext.FirstList();

我个人不喜欢将dbContext对象作为参数传递的想法。 您可以完全分离数据层并将其存储在另一个类中。

public class DataAccess {
   private EFEntities _dbContext { get; set; }

   public EfEntities GetDbContext() {
        if (_dbContext != null) {
             return _dbContext;
        } else {
            _dbContext = new EFEntities(.....);
            return _dbContext;
        }
   }
}

然后,您可以引用包含所需上下文的DataAccess类,而不是每次都将其作为参数传递。

不要让它静止。 您需要返回这些列表的上下文。 静态成员被设计为较少的上下文。 所以基本上你想要的是将这些方法移动到类实例,并通过依赖注入或其他类型的工厂提供构造上下文。

坚持静力学的设计决定是什么? 一个糟糕的解决方法是将上下文一次传递给静态字段然后使用它,但这基本上就是你应该对类实例做的事情

我知道这是一个老问题,但我做了这个解决方案。 最多是语法糖

public List<Cert> List()
{
    return db.Certs.ToList();
}

public static List<Cert> All()
    {
    return new CertsController().List();
}

用法:

List<Cert> Certificates = CertsController.All();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM