Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 静态与非静态web存储库_C#_Entity Framework_Web Services_Asp.net Web Api_Static - Fatal编程技术网

C# 静态与非静态web存储库

C# 静态与非静态web存储库,c#,entity-framework,web-services,asp.net-web-api,static,C#,Entity Framework,Web Services,Asp.net Web Api,Static,我最近发现了一个很好的web api/angular网站开发工具。在阅读教程时,我注意到一些存储库是,而其他存储库是 存储库是静态的还是非静态的?演出并发问题?没有充分的理由 在将其实现为静态存储库的过程中,他失去了依赖注入和单元测试的能力,但却没有获得真正的能力作为交换。虽然人们可能会将其视为基于观点的问题,但这个问题有一个非常客观的答案 在有线程、多个用户或多个“视图”的任何情况下使用静态数据上下文都是非常糟糕的想法 让我们看看这里: public static List<Employ

我最近发现了一个很好的web api/angular网站开发工具。在阅读教程时,我注意到一些存储库是,而其他存储库是

存储库是静态的还是非静态的?演出并发问题?

没有充分的理由


在将其实现为静态存储库的过程中,他失去了依赖注入和单元测试的能力,但却没有获得真正的能力作为交换。

虽然人们可能会将其视为基于观点的问题,但这个问题有一个非常客观的答案

在有线程、多个用户或多个“视图”的任何情况下使用静态数据上下文都是非常糟糕的想法

让我们看看这里:

public static List<Employee> InsertEmployee(Employee e)
{
    dataContext.Employees.Add(e);
    dataContext.SaveChanges();
    return GetAllEmployees();
}
公共静态列表插入员工(员工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();
}
公共静态列表GetAllEmployees()
{
var query=来自dataContext.Employees中的雇员
选择员工;
返回query.ToList();
}
因此,如果一个线程加载员工并更改名称(但尚未保存),然后另一个名为
InsertEmployee
的页面也会保存名称更改


在ASP.NET应用程序中,静态数据上下文不是一个糟糕的主意,我想不出哪种情况。

我从来没有想过,如果是静态的,保存更改会影响所有用户。在某些情况下,它可能会引起很多头痛。让所有存储库都不是静态的可能更安全。