如何在调用Database.SqlQuery <telement>(...)

时间:2017-12-12 21:30:48

标签: c# entity-framework

我在我的代码中使用存储过程并使用 Database.SqlQuery<TElement>(string sql, params object[] parameters);

像这样:

IEnumerable result = database.SqlQuery<MyThing>("StoredProcedureName @ParameterName", storedProcedureParameter).AsQueryable();

将结果作为所需类型的集合。有时候,当特别加载网络时,我会遇到一个抛出异常的情况

  

“建立......时发生与网络相关或特定于实例的错误”

我之前在EF中通过创建执行策略并将其应用于EF配置来解决此问题。

现在从堆栈跟踪中我发现这也使用了执行策略,但这次它是default DbExecutionStrategy。我尝试为默认执行策略制作扩展方法,但最终无法使其工作,因为我的执行策略依赖于新字段和所有爵士乐。我在app.config中的codeConfigurationType="MyNameSpace.CustomConfiguration"标记中也有<entityFramework>

如何确保Database.SqlQuery()使用我的执行策略?

1 个答案:

答案 0 :(得分:1)

我有一个问题,我的DbExecutionStrategy被完全忽略了。我可以按照手动呼叫执行策略部分下的指南强制使用它:https://msdn.microsoft.com/en-us/library/dn307226(v=vs.113).aspx

你基本上想要:

var executionStrategy = new MyExecutionStrategy(); //manually instantiate your execution strategy

executionStrategy.Execute( //pass whatever you need to do as an action to the Execute method of your execution strategy
    () => 
    { 
        using (var context = new Entities()) 
        { 
            //...do stuff
            context.SaveChanges();
        } 
    });

只有在您希望能够关闭执行策略时(如果您正在处理事务),才应该有关于SuspendExecutionStrategy属性的部分。