gpt4 book ai didi

c# - Entity Framework - MultipleActiveResultSets 对缓存的影响

转载 作者:太空狗 更新时间:2023-10-29 21:39:43 25 4
gpt4 key购买 nike

所以我有一个类似于以下内容的类。有一个线程使用 Entity Framework Code First DbContext 做一些工作。

我遇到的问题是 m_DB 上下文似乎正在缓存数据,即使它应该为每个处理循环处理和重新创建。

我所看到的是关系中的某些数据不存在于加载的模型中。如果我突然终止并重新启动该进程,就会发现数据就像它应该的那样。

我唯一能想到的是这个应用程序在数据库连接字符串中使用了 MultipleActiveResultSets=true,但我找不到任何明确说明这会导致我所看到的行为的内容。

如有任何见解,我们将不胜感激。


public class ProcessingService
{

private MyContext m_DB = null
private bool m_Run = true;

private void ThreadLoop()
{
while(m_Run)
{
try
{
if(m_DB == null)
m_DB = new MyContext();
}
catch(Exception ex)
{
//Log Error
}
finally
{
if(m_DB != null)
{
m_DB.Dispose();
m_DB = null;
}
}
}
}

private void ProcessingStepOne()
{
// Do some work with m_DB
}

private void ProcessingStepTwo()
{
// Do some work with m_DB
}
}

最佳答案

多个事件结果集或 MARS 是 SQL 2005/2008 和 ADO.NET 的一项功能,其中一个连接可用于多个事件结果集(顾名思义)。尝试在连接字符串上关闭它并观察应用程序的行为,我猜这可能是导致您出现问题的原因。阅读以下 MSDN 链接以了解有关 MARS 的更多信息

MSDN - Multiple Active Result Sets

编辑:尝试:

var results = context.SomeEntitiy.AsNoTracking() where this = that select s;

AsNoTracking() 关闭实体的内部更改跟踪,它还应强制 Entity Framework 每次重新加载实体。

无论说什么和做什么,您都需要进行一些重构,因为您的代码中显然存在设计缺陷。

关于c# - Entity Framework - MultipleActiveResultSets 对缓存的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19578467/

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