Yar*_*ara 59 c# entity-framework-4 command-timeout dbcontext
我正在寻找为DbContext设置CommandTimeout的方法.搜索之后,我通过将DbContext转换为ObjectContext并为objectContext的CommandTimeout属性设置值来找到方法.
var objectContext = (this.DbContext as IObjectContextAdapter).ObjectContext;
Run Code Online (Sandbox Code Playgroud)
但我必须使用DbContext.
Jon*_*oln 93
它将适用于您的方法.
或者它的子类(来自msdn论坛)
public class YourContext : DbContext
{
public YourContext()
: base("YourConnectionString")
{
// Get the ObjectContext related to this DbContext
var objectContext = (this as IObjectContextAdapter).ObjectContext;
// Sets the command timeout for all the commands
objectContext.CommandTimeout = 120;
}
}
Run Code Online (Sandbox Code Playgroud)
Per*_*let 22
var ctx = new DbContext();
ctx.Database.CommandTimeout = 120;
Run Code Online (Sandbox Code Playgroud)
Rej*_*esh 21
这可能对你有所帮助.
public class MyContext : DbContext
{
public MyContext () : base(ContextHelper.CreateConnection("my connection string"), true)
{
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 300;
}
}
Run Code Online (Sandbox Code Playgroud)
我发现更改.tt文件对我有用,因为我不会在以后丢失更改:
添加此行:
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 300;
Run Code Online (Sandbox Code Playgroud)
在DbContext创建者之后和!loader.IsLazy构造之前:
<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext
{
public <#=code.Escape(container)#>()
: base("name=<#=container.Name#>")
{
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 300;
<#
if (!loader.IsLazyLoadingEnabled(container))
Run Code Online (Sandbox Code Playgroud)
它应该出现在您生成的Context.cs中:
public MyEntities()
: base("name=MyEntities")
{
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 300;
}
Run Code Online (Sandbox Code Playgroud)