Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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 API应用程序中最好地利用DBContext_C#_Asp.net Mvc 4 - Fatal编程技术网

C# 如何在Web API应用程序中最好地利用DBContext

C# 如何在Web API应用程序中最好地利用DBContext,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我有一个Web API,它使用实体框架DBContext来执行CRUD操作。我的问题如下: 最初,我使用了DBContext的一个静态实例。但是,使用这种格式,当我再次查询数据集时,不会显示对数据库表的任何更改;数据过时了 作为临时修复,在所有公共类函数的开头,我创建了一个新的DBContext对象,并调用该对象从数据库中获取数据。由于许多原因,这不是最好的主意。但是当我使用这种技术时,数据不再陈旧 如何适当地利用DBContext,以便多个用户始终可以看到来自请求的当前数据库数据?我应该将DB

我有一个Web API,它使用实体框架DBContext来执行CRUD操作。我的问题如下:

最初,我使用了DBContext的一个静态实例。但是,使用这种格式,当我再次查询数据集时,不会显示对数据库表的任何更改;数据过时了

作为临时修复,在所有公共类函数的开头,我创建了一个新的DBContext对象,并调用该对象从数据库中获取数据。由于许多原因,这不是最好的主意。但是当我使用这种技术时,数据不再陈旧

如何适当地利用DBContext,以便多个用户始终可以看到来自请求的当前数据库数据?我应该将DBContext作为字段放在类中,并在类的构造函数中实例化它吗?在这种情况下,每个类都应该有自己的DBContext对象吗


是否有适当使用DBContext的最佳实践?我担心过时的数据和不准确的结果被推送到我的用户手中。

不是线程安全的,因此使其成为静态对于服务器代码来说不是一件好事。创建
DbContext
的开销很低,因此我不明白为什么我们必须避免将其变为实例变量。

不是线程安全的,因此将其变为静态对于服务器代码来说不是一件好事。创建
DbContext
的开销很低,因此我不明白为什么我们必须避免将其变为实例变量。

还应该注意实体框架缓存数据。如果您直接在数据库中对缓存的数据进行更改,Entity Framework将不会看到这些更改,除非您创建一个新的DbContext,或将底层ObjectContext告知。还应注意,Entity Framework缓存数据。如果您直接在数据库中对缓存数据进行更改,Entity Framework将不会看到这些更改,除非您创建一个新的DbContext,或将底层ObjectContext告知。

当您对数据库进行更改时,您是在相同的静态DbContext中还是以其他方式执行此操作?我通过调用Web API来检查表中的值。Web API返回数据。例如,该值可以是451。然后,我使用SSMS直接在表中键入一个新值来更改数据库。当我再次运行API调用时,在将数据输入数据库后,API返回旧值,而不是我刚才输入的新值。当我使用静态DBContext时会发生这种情况。如果每次调用API时都创建一个新的DBContext,则API将返回我在表中键入的新数据。当您对数据库进行更改时,是在相同的静态DBContext中还是以其他方式进行更改?我通过调用Web API来检查表中的值。Web API返回数据。例如,该值可以是451。然后,我使用SSMS直接在表中键入一个新值来更改数据库。当我再次运行API调用时,在将数据输入数据库后,API返回旧值,而不是我刚才输入的新值。当我使用静态DBContext时会发生这种情况。如果每次调用API时都创建一个新的DBContext,API将返回我在表中键入的新数据。