我在我的代码中使用存储过程并使用
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()
使用我的执行策略?
答案 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属性的部分。