gpt4 book ai didi

c# - EF6 中是否可以使用特定于查询的 DbExecutionStrategies?

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

更新:问题是我正在评估在构造函数中使用哪种执行策略,而不是将其留在 lambda 中。换句话说,我在 MyConfiguration 的构造函数中包含了这个...

var strategy = SuspendExecutionStrategy 
? (IDbExecutionStrategy)new DefaultExecutionStrategy()
: new SqlAzureExecutionStrategy());
this.SetExecutionStrategy("System.Data.SqlClient", () => strategy);

而不是在 lambda 内进行评估。

原始问题:Entity Framework 6.0 中是否有任何方法可以让 DbContext 上的某些查询使用一种执行策略,而其他查询则使用不同的执行策略?我在 Microsoft's documentation 中看到以下示例.

public class MyConfiguration : DbConfiguration
{
public MyConfiguration()
{
this.SetExecutionStrategy("System.Data.SqlClient", () => SuspendExecutionStrategy
? (IDbExecutionStrategy)new DefaultExecutionStrategy()
: new SqlAzureExecutionStrategy());
}

public static bool SuspendExecutionStrategy
{
get
{
return (bool?)CallContext.LogicalGetData("SuspendExecutionStrategy") false;
}
set
{
CallContext.LogicalSetData("SuspendExecutionStrategy", value);
}
}
}

不幸的是,在我的测试中,如果我创建 DbContext 类的多个实例,则只有一次对 DbConfiguration 的构造函数的调用,该单例配置对象得到在上下文对象之间共享。因此,虽然我可以在启动时使用 SuspendExecutionStrategy 设置此值,但我无法在运行时更改它。我想稍后调用 SetExecutionStrategy() 可能会改变它,但我有多个线程,并且希望一些线程使用一个 DbExecutionStrategy 而其他线程使用不同的线程(特别是对于可重试查询与不可重试查询)。

是否有一些设置可以将DbConfiguration更改为不是该类的单例,而是特定于DbContext的特定实例?或者我完全误解了什么?

理想情况下,我希望能够做一些类似的事情......

using(var repo = new MyDbContext()){
repo.SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());
// do some queries to my repository
}

在一个线程中,然后在另一个线程中,有

using(var repo = new MyDbContext()){
repo.SetExecutionStrategy("System.Data.SqlClient", () => (IDbExecutionStrategy)new DefaultExecutionStrategy());
// do some queries to my repository
}

最佳答案

问题是我正在评估在构造函数中使用哪种执行策略,而不是将其留在 lambda 中。换句话说,我在 MyConfiguration 的构造函数中包含了这个...

var strategy = SuspendExecutionStrategy 
? (IDbExecutionStrategy)new DefaultExecutionStrategy()
: new SqlAzureExecutionStrategy());
this.SetExecutionStrategy("System.Data.SqlClient", () => strategy);

而不是在 lambda 内进行评估。这是一个微妙的差异,但在实际评估时(构建与使用时)它会发生变化。

关于c# - EF6 中是否可以使用特定于查询的 DbExecutionStrategies?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53212962/

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