entity framework超时
我使用entity framework(EF)超时使用function导入,需要超过30秒才能完成。 我尝试了以下,并没有能够解决这个问题:
按照此处的build议,将EDMX文件的项目中的App.Config文件中的连接string添加为Default Command Timeout=300000
。
这是我的连接string看起来像:
<add name="MyEntityConnectionString" connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl| res://*/MyEntities.msl; provider=System.Data.SqlClient;provider connection string=" Data Source=trekdevbox;Initial Catalog=StarTrekDatabase; Persist Security Info=True;User ID=JamesTKirk;Password=IsFriendsWithSpock; MultipleActiveResultSets=True;Default Command Timeout=300000;"" providerName="System.Data.EntityClient" />
我试图直接在我的仓库中设置CommandTimeout,如下所示:
private TrekEntities context = new TrekEntities(); public IEnumerable<TrekMatches> GetKirksFriends() { this.context.CommandTimeout = 180; return this.context.GetKirksFriends(); }
我还有什么可以让EF从超时? 这只发生在非常大的数据集上。 一切工作正常小数据集。
这是我得到的错误之一:
System.Data.EntityCommandExecutionException:执行命令定义时发生错误。 详情请参阅内部例外。 —> System.Data.SqlClient.SqlException:超时过期。 操作完成之前超时的时间或服务器没有响应。
好的 – 我得到了这个工作,发生了什么事情很愚蠢。 我有两个连接string与Default Command Timeout=300000
和CommandTimeout设置为180.当我从连接string中删除Default Command Timeout
,它的工作。 所以答案是在你的上下文对象上手动设置你的仓库中的CommandTimeout如下所示:
this.context.CommandTimeout = 180;
显然在连接string中设置超时设置对它没有影响。
有一个已知的错误,指定EF连接string内的默认命令超时。
http://bugs.mysql.com/bug.php?id=56806
从连接string中删除值并将其设置在数据上下文对象本身上。 这将工作,如果您从连接string中删除冲突的值。
entity framework核心1.0:
this.context.Database.SetCommandTimeout(180);
entity framework6:
this.context.Database.CommandTimeout = 180;
entity framework5:
((IObjectContextAdapter)this.context).ObjectContext.CommandTimeout = 180;
entity framework4及以下:
this.context.CommandTimeout = 180;
如果您正在使用DbContext,请使用以下构造函数来设置命令超时:
public class MyContext : DbContext { public MyContext () { var adapter = (IObjectContextAdapter)this; var objectContext = adapter.ObjectContext; objectContext.CommandTimeout = 1 * 60; // value in seconds } }
如果您使用的是DbContext
和EF v6 +,或者您可以使用:
this.context.Database.CommandTimeout = 180;
通常我在一个事务中处理我的操作。 正如我所经历的,设置上下文命令超时是不够的,但事务需要一个带有超时参数的构造函数。 我必须设置两个超时值才能正常工作。
int? prevto = uow.Context.Database.CommandTimeout; uow.Context.Database.CommandTimeout = 900; using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(900))) { ... }
在函数结束时,我将命令超时设置回prevto中的前一个值。
使用EF6
这是我的资金。 也许这对别人有帮助:
所以在这里我们去:
如果您使用LINQ与EF查找列表中包含的一些确切的元素,如下所示:
await context.MyObject1.Include("MyObject2").Where(t => IdList.Contains(t.MyObjectId)).ToListAsync();
一切正常,直到IdList包含多个Id。
如果列表只包含一个Id,则会出现“超时”问题。 要解决这个问题,使用if条件来检查IdList中的id号。
例:
if (IdList.Count == 1) { result = await entities. MyObject1.Include("MyObject2").Where(t => IdList.FirstOrDefault()==t. MyObjectId).ToListAsync(); } else { result = await entities. MyObject1.Include("MyObject2").Where(t => IdList.Contains(t. MyObjectId)).ToListAsync(); }
说明:
只需尝试使用Sql Profiler并检查Entity frameeork生成的Select语句。 …
我知道这是非常古老的线程运行,但仍然没有解决这个EF。 对于使用自动生成的DbContext
用户,可以使用以下代码手动设置超时值。
public partial class SampleContext : DbContext { public SampleContext() : base("name=SampleContext") { this.SetCommandTimeOut(180); } public void SetCommandTimeOut(int Timeout) { var objectContext = (this as IObjectContextAdapter).ObjectContext; objectContext.CommandTimeout = Timeout; }
- Json.NET序列化具有根名称的对象
- IIS和静态内容?
- IIS URL重写和Web.config
- 如何显示DisplayAttribute.Description属性值?
- 您使用哪个.NET Memcached客户端,EnyimMemcached与BeITMemcached?
- 你如何处理ASP.NET MVC框架中的多个提交button?
- 安装ASP.NET和Web Tools 2015(RC1 Update 1)后,Visual Studio 2015错误“对象引用未设置为对象的实例”
- 在asp.net中有没有什么办法可以确定CultureInfo的文本方向?
- dynamic添加DropDownlists不会触发SelectedIndexChanged事件