我最近为web api / angular网站开发找到了一个很棒的tutorial。我注意到在教程之后有些存储库是static,而其他存储库是not static。
存储库是静态还是非静态的?性能?并发问题?
答案 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)
无缘无故。
在将其作为静态存储库实现时,他失去了依赖注入和单元测试的能力,同时又没有获得真正的权力。