Entity framework 实体框架、DBContext和;基础提供程序在打开时失败";握手次数多
我偶尔抛出System.Data.EntityException。异常表示连接时握手时间很长。例外信息为: System.Data.EntityException:基础提供程序在打开时失败。-->System.Data.SqlClient.SqlException:连接超时已过期。登录后阶段经过的超时时间。连接可能在等待服务器完成登录过程并响应时超时;或者,它可能在尝试创建多个活动连接时超时。尝试连接到此服务器的持续时间为-[预登录]初始化=40;握手=25118;[登录]初始化=0;认证=0;[登录后]完成=4384;-->System.ComponentModel.Win32异常:等待操作超时 请注意,“握手”阶段为25.118秒。考虑到连接和命令超时仅为30,出现问题也就不足为奇了。我的问题是Entity framework 实体框架、DBContext和;基础提供程序在打开时失败";握手次数多,entity-framework,sql-server-express,dbcontext,connection-timeout,Entity Framework,Sql Server Express,Dbcontext,Connection Timeout,我偶尔抛出System.Data.EntityException。异常表示连接时握手时间很长。例外信息为: System.Data.EntityException:基础提供程序在打开时失败。-->System.Data.SqlClient.SqlException:连接超时已过期。登录后阶段经过的超时时间。连接可能在等待服务器完成登录过程并响应时超时;或者,它可能在尝试创建多个活动连接时超时。尝试连接到此服务器的持续时间为-[预登录]初始化=40;握手=25118;[登录]初始化=0;认证=0;
public class MyContext : DbContext
{
public MyContext (string dbName, bool setInitializer = true)
: base(dbName)
{
if (setInitializer)
{
Database.SetInitializer(new MyContextInitializer());
// Set timeout (based on code from http://stackoverflow.com/questions/6232633/entity-framework-timeouts)
var adapter = (IObjectContextAdapter) this;
var objectContext = adapter.ObjectContext;
objectContext.CommandTimeout = CommandTimeoutSeconds;
}
}
public DbSet<FuelReading> FuelReadings {get; set;}
}
internal class MyContextInitializer : DropCreateDatabaseIfModelChanges<MyContext>
{
/// <summary>
/// Adds initial values to the db on db creation.
/// </summary>
/// <param name="context"></param>
protected override void Seed(MyContext context)
{
// Seed
// TODO: Remove this seeding if we upgrade to .NET 4.5 (Entity Framework 5 has enum support on .NET 4.5)
var fuelReading= new fuelReading {Name = "Unknown"};
context.FuelReadings.Add(fuelReading);
base.Seed(context);
}
}
但我强调,它也出现在其他地方
我可以提供更多的相关细节吗?有人有什么想法吗
更新。根据评论和朋友的建议,我开始关注PerfMon。通常,“连接重置/秒”通过屋顶(至300)。我在这个柜台上找不到太多的信息。从表面上看,这是连接在一秒钟内重置的次数。这是否意味着尝试或建立了大量连接?我不确定为什么这个数字会如此之高,因为我认为(代码是继承的)数据库(SQLServerExpress)只是写入到对象中。这些对象都是使用LINQ读取、操作、写入等的,但我认为在非常重要的DbContext.SaveChanges(…)出现之前,dB不会再发生任何事情,所以我不确定这个计数器告诉了我什么。然而,如果它确实反映了大量的联系,那么它可能是一条关于发生了什么的重要线索。可能我没有连接或类似的东西?时间太长了,数据库是位于同一台计算机上,还是位于远程网络?同一台计算机上。谢谢,Davethere我们有很多方法来检查。。。若查询触发到sql,那个么使用ef中的日志扩展方法,使用类似于Spile的工具,其中一个来自stackoverflow(我忘了名字),使用块中的查询语句来处理上下文。。确保连接字符串是正确的:)您可以共享您的anonimized连接字符串吗?它使用的是IP地址、netbios名称还是完全合格的域名?那个盒子域名加入了吗?启用了哪些协议?rene,连接字符串是:并且在DbContext派生类的构造函数中,我有:Database.SetInitializer(新的ModalityDataContextInitializer());var adapter=(IObjectContextAdapter)这个;var objectContext=adapter.objectContext;objectContext.CommandTimeout=30;
FuelReading reading= (from tz in _dbContext.FuelReadings
where
tz.Id ==
3
select tz).FirstOrDefault();