gpt4 book ai didi

c# 在多线程服务器中使用 Entity Framework

转载 作者:IT王子 更新时间:2023-10-29 03:57:16 25 4
gpt4 key购买 nike

在多线程服务器中使用 Entity Framework 的最佳实践是什么?我正在使用 Entity Framework ObjectContext 来管理我所有的数据库操作,现在我知道这个上下文不是线程安全的,所以现在当我需要使用它来执行一些数据库操作时,我用lock 声明是安全的。我应该这样做吗??

最佳答案

在多线程环境中对 Entity Framework 的一些快速建议:

  • 不要使用带有的唯一上下文(无单例模式)
  • 提供stateless services (您需要实例化并处理每个请求一个上下文)
  • 尽可能缩短上下文生命周期
  • 实现 concurrency-control system .可以使用 Entity Framework ( how-to ) 轻松实现乐观并发。这将确保您在使用不是最新的实体时不会覆盖数据库中的更改

I'm a bit confused, I thought that using one context is good because it does some catching I believe, so when I'm dealing with the same entity in consecutive requests it be much faster to use the same context then creating a new context every time. So why does it good to use it like this if It slower and still not thread safe?

可以只使用一个上下文,但强烈建议不要这样做除非您真的知道自己在做什么

我发现这种方法经常出现两个主要问题:

  1. 您将使用大量内存,因为您的上下文永远不会被释放,并且所有被操纵的实体都将缓存在内存中(缓存查询结果中出现的每个实体)。

  2. 如果您从另一个程序/上下文修改您的数据,您将面临很多并发问题。例如,如果您直接在数据库中修改某些内容,并且关联的实体已经缓存在您的唯一上下文对象中,那么您的上下文永远不会知道直接在数据库中进行的修改。您将使用不是最新的缓存实体,相信我,这会导致难以发现和修复的问题。

也不必担心使用多个上下文的性能:在 90% 的用例中,为每个请求创建/处理新上下文的开销几乎微不足道。请记住,创建新上下文并不一定会创建与数据库的新连接(因为数据库通常使用连接池)。

关于c# 在多线程服务器中使用 Entity Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9415955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com