Entity Framework에서 데이터베이스 시간 초과 설정
명령 시간이 초과되어 기본 명령 시간 제한 값을 변경해야합니다.
찾았 myDb.Database.Connection.ConnectionTimeout
지만 readonly
.
Entity Framework 5 에서 명령 시간 초과를 어떻게 설정할 수 있습니까?
상황에 따라 시도하십시오.
public class MyDatabase : DbContext
{
public MyDatabase ()
: base(ContextHelper.CreateConnection("Connection string"), true)
{
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 180;
}
}
연결 문자열에서 시간 초과를 정의 Connection Timeout
하려면 다음 연결 문자열과 같은 매개 변수를 사용하십시오 .
<connectionStrings>
<add name="AdventureWorksEntities"
connectionString="metadata=.\AdventureWorks.csdl|.\AdventureWorks.ssdl|.\AdventureWorks.msl;
provider=System.Data.SqlClient;provider connection string='Data Source=localhost;
Initial Catalog=AdventureWorks;Integrated Security=True;Connection Timeout=60;
multipleactiveresultsets=true'" providerName="System.Data.EntityClient" />
</connectionStrings>
출처 : 방법 : 연결 문자열 정의
당신이 사용할 수있는 DbContext.Database.CommandTimeout = 180;
매우 간단하고 캐스트가 필요하지 않습니다.
내 부분적인 내용은 다음과 같습니다.
public partial class MyContext : DbContext
{
public MyContext (string ConnectionString)
: base(ConnectionString)
{
this.SetCommandTimeOut(300);
}
public void SetCommandTimeOut(int Timeout)
{
var objectContext = (this as IObjectContextAdapter).ObjectContext;
objectContext.CommandTimeout = Timeout;
}
}
나는 왼쪽 SetCommandTimeOut
그래서에만 루틴 공공 나는 오랜 시간 (5 분 이상) 내가 대신 글로벌 타임 아웃의 수정을해야합니다.
생성 된 생성자 코드에서 호출해야합니다. OnContextCreated()
이 부분 클래스를 추가하여 문제를 해결했습니다.
partial class MyContext: ObjectContext
{
partial void OnContextCreated()
{
this.CommandTimeout = 300;
}
}
I extended Ronnie's answer with a fluent implementation so you can use it like so:
dm.Context.SetCommandTimeout(120).Database.SqlQuery...
public static class EF
{
public static DbContext SetCommandTimeout(this DbContext db, TimeSpan? timeout)
{
((IObjectContextAdapter)db).ObjectContext.CommandTimeout = timeout.HasValue ? (int?) timeout.Value.TotalSeconds : null;
return db;
}
public static DbContext SetCommandTimeout(this DbContext db, int seconds)
{
return db.SetCommandTimeout(TimeSpan.FromSeconds(seconds));
}
}
Same as other answers, but as an extension method:
static class Extensions
{
public static void SetCommandTimeout(this IObjectContextAdapter db, TimeSpan? timeout)
{
db.ObjectContext.CommandTimeout = timeout.HasValue ? (int?) timeout.Value.TotalSeconds : null;
}
}
For Database first Aproach:
We can still set it in a constructor, by override the ContextName.Context.tt T4 Template this way:
<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext
{
public <#=code.Escape(container)#>()
: base("name=<#=container.Name#>")
{
Database.CommandTimeout = 180;
<#
if (!loader.IsLazyLoadingEnabled(container))
{
#>
this.Configuration.LazyLoadingEnabled = false;
<#
}
Database.CommandTimeout = 180;
is the acutaly change.
The generated output is this:
public ContextName() : base("name=ContextName")
{
Database.CommandTimeout = 180;
}
If you change your Database Model, this template stays, but the actualy class will be updated.
참고URL : https://stackoverflow.com/questions/12788972/set-database-timeout-in-entity-framework
'IT' 카테고리의 다른 글
숫자 문자열을 숫자 배열로 변환하는 방법은 무엇입니까? (0) | 2020.06.08 |
---|---|
스칼라의 연산자 오버로드가 "좋은"것이지만 C ++의 "나쁜"것은 무엇입니까? (0) | 2020.06.08 |
PHP / XAMPP에서 cURL을 활성화하는 방법 (0) | 2020.06.08 |
char *와 const char *의 차이점은 무엇입니까? (0) | 2020.06.08 |
모든 쿼리를 기록하는 MongoDB (0) | 2020.06.08 |