静态与非静态Web存储库

时间:2016-06-02 23:28:02

标签: c# entity-framework web-services asp.net-web-api static

我最近为web api / angular网站开发找到了一个很棒的tutorial。我注意到在教程之后有些存储库是static,而其他存储库是not static

存储库是静态还是非静态的?性能?并发问题?

2 个答案:

答案 0 :(得分:2)

虽然人们可能会将此视为一个基于意见的问题,但该问题有一个非常真实的目标答案。

任何情况下使用静态数据上下文,其中将存在线程,多个用户或多个视图' 是一个非常糟糕的主意

让我们来看看:

public static List<Employee> InsertEmployee(Employee e)
{
    dataContext.Employees.Add(e);
    dataContext.SaveChanges();
    return GetAllEmployees();
}

看起来很无辜,对吧?错误。此方法将保存上下文检测到的任何更改。这包括其他用户和/或线程所做的更改

例如,我们将获得系统中的所有员工。我们并没有告诉实体框架来跟踪实体。

public static List<Employee> GetAllEmployees()
{
    var query = from employee in dataContext.Employees
                select employee;
    return query.ToList();
}

因此,如果一个线程要加载员工,并更改名称(但尚未保存),然后更改另一个名为InsertEmployee的页面,则名称更改也将保存。

我无法想到静态数据上下文在ASP.NET应用程序中不是一个糟糕的想法。

答案 1 :(得分:0)

无缘无故。

在将其作为静态存储库实现时,他失去了依赖注入和单元测试的能力,同时又没有获得真正的权力。