gpt4 book ai didi

entity-framework - Entity Framework 上下文管理

转载 作者:行者123 更新时间:2023-12-04 07:25:39 25 4
gpt4 key购买 nike

我对 Entity Framework 上下文实例管理有一些疑问。

我的代码库由许多独立的组件/代理组成,这些组件/代理都运行在一个进程中,这些组件/代理只能通过在方便时从相应队列中读取消息来完成工作(每当组件准备就绪时,它就会从队列中获取下一条消息,因此没有组件级别的并发问题)

每个组件都需要独立于其他组件与数据库交互。我想知道为每个组件设置上下文实例的更好方法是什么。以下是一些选项

1> 拥有所有组件使用的上下文的一个实例。 --> 我认为这是最糟糕的,因为它会产生许多并发问题?

2> 给每个组件一个独立的上下文实例。 --> 这看起来不错,但是

  • 当所有组件在此进程中同时运行时,可以在一个进程中拥有多个上下文独立实例吗?
  • 我应该为组件将处理的每条新消息创建一个新的上下文实例,还是在组件的生命周期内保留一个上下文实例?我认为最后一个更有意义,但我更习惯于在 using{} 括号中使用上下文,我不确定在每个组件的生命周期中保持一个上下文是否对我使用它的方式有任何影响?
  • 如果所有上下文都在一个进程中,我可以依靠乐观一致性以便两个不同的独立组件不会在数据库中放置相同的记录吗?

  • 顺便说一句,我正在使用 Entity Framework 4.1。

    最佳答案

    肯定每个组件/代理使用一个上下文 - 如果组件是多线程的,每个线程使用一个上下文。如果每个消息处理都作为单独的“逻辑事务”执行,则每个消息处理使用一个上下文。

    为什么:

  • Context 在内部使用了两个非常重要的设计模式——身份映射和工作单元。 This answer描述了这些模式强制执行的行为。
  • EF 中的上下文和其他任何内容都不是线程安全的。

  • 乐观并发并不意味着不同的上下文不会在数据库中放置相同的记录。乐观并发意味着更新语句将数据库中的当前状态与上下文的最后已知状态进行比较(加载记录和保存新值之间存在延迟,另一个上下文可以更改记录)。如果记录改变了,你会得到一个异常,你必须以某种方式处理它。

    关于entity-framework - Entity Framework 上下文管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6336455/

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