entity framework底层提供程序在Open上失败

下面是我的连接字符串:

的connectionString =“元数据= RES://*/EDMX.Test.csdl | RES://*/EDMX.Test.ssdl | RES://*/EDMX.Test.msl;提供商= System.Data.SqlClient的;提供者connection string =“Data Source = home_computer; Initial Catalog = db_Test; Persist Security Info = True; User ID = testUser; Password = $ 1234; MultipleActiveResultSets = True”“

这是程序卡住的代码:

EDMX.TestingEntity context = new EDMX.TestingEntity(); var query = from t in context.User where t.UserName == _userName select t; 

运行上面的代码后,我检查变量查询并发现exception

底层提供程序在Open上失败。

我检查过:

  1. 服务器和计算机之间的连接是正常的
  2. 我可以使用用户名testuser和密码$ 1234登录数据库
  3. 我已检查数据库(SQL Server)中的安全设置是否已授予testUser权限

为什么会发生这种exception? 我正在使用.net 4.5


添加:

我再次尝试,查看内部exception,它是:建立与SQL Server的连接时发生与网络相关或特定于实例的错误。 服务器未找到或无法访问。 validation实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:命名管道提供程序,错误:40 – 无法打开与SQL Server的连接)

我知道这可能是一个网络问题,但我关闭了服务器和我的电脑的防火墙,并再次尝试,但仍然没有成功..


刚刚将连接字符串复制到一个程序来测试这个连接,它运行良好..


我只是回滚所有更改并再次测试并且它有效

似乎是一个连接问题。 您可以使用数据链接属性来查找连接是否正常。 请执行下列操作:

  1. 创建一个空白记事本并将其重命名为“X.UDL”
  2. 双击打开它
  3. 在“连接”选项卡下,选择服务器名称/输入名称使用正确的凭据和DB
  4. 单击“确定”保存。

现在在记事本中打开该文件并比较连接字符串属性。

  1. 在程序和文件中搜索“组件服务”
  2. 转到服务
  3. 查找“分布式事务处理协调器”服务
  4. 右键单击并重新启动服务

您刚刚重新启动了服务,代码应该运行没有错误

此代码项目提示中描述了可能的解决方案:

当人们在尝试登录sql server时提到IIS用户网络服务用户凭据。 因此,只需更改IIS中的应用程序池设置:

  1. 打开Internet信息服务管理器
  2. 单击左侧导航树中的“应用程序池”。
  3. 选择您的版本池。 就我而言,我使用的是ASP .Net v4.0。 如果您没有此版本,请选择DefaultAppPool。
  4. 右键单击步骤3,然后选择高级设置。
  5. 在属性窗口中选择Identity,然后单击按钮以更改值。
  6. 在“内置帐户”combobox中选择“本地系统”,然后单击“确定”。 而已。 现在运行你的应用程序 一切都很好。

我们在web.configData Source=localhost连接字符串,并且出现了这个错误(MSSQL在同一台机器上)。 将它改为实际的`DOMAIN \ MACHINE’有帮助,不管怎么说。

如果有的话,请务必检查内部exception。 在我的案例中,Inner Exception对于解决问题非常有帮助。

我的网站在Dev Environment中运行良好。 但是在我部署到生产之后,它开始发出这个exception,但内部exception表示登录对特定用户失败了。
所以我发现它与连接本身有关。 因此尝试使用SSMS登录,甚至失败。

最终发现exception出现的原因很简单,SQL服务器只启用了Windows身份validation,而SQL身份validation失败了,这就是我用于身份validation的内容。

简而言之,将身份validation更改为混合(SQL和Windows),为我解决了问题。 🙂

请先检查以下事项。

在生成Edmx时,您可以为连接字符串指定名称。 使用实体进入项目的应用程序配置。

您是否已将相同的连接字符串复制到主Config文件中。 名称应与生成EDMX文件时给出的名称相同。

我的客户报告了这个错误。 我发现他正在弄乱* .ldf文件。 他将* ldf文件复制到一个数据库并重命名为匹配第二个数据库(我要求他放在一个文件夹中)。

我复制了相同的场景,并在我的开发系统中遇到了同样的错误。 删除* ldf文件后错误得到修复。

当一位同事试图连接到受VPN保护的数据库时,我看到了这个错误。 用户已将未知信息切换到无法访问VPN的无线网络。 测试此方案的一种方法是查看是否可以使用其他方式(例如SSMS)建立连接,并查看是否也出现连接。

对于我来说,当通常开始发生时,我必须远程桌面进入服务,并至少重新启动IIS。 它通常在我部署代码后立即弹出。 在极少数情况下,我不得不重新启动SQL服务和IIS。 我写了一个批处理脚本来获取一个参数(1或2)并设置为重新启动IIS(即1),或者完全核(即2)。

我在继续执行调用正在使用并行处理的方法的unit testing时遇到了这个问题。我知道EF的某些部分不是线程安全的,所以我想知道是否存在连接打开的冲突并且关闭与操作不同步。

我的堆栈跟踪显示:

  at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) at System.Threading.Tasks.Task.Wait() at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally) at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IList`1 list, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally) at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally) at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable`1 source, Action`1 body) 

这就是我所遵循的线索。 当我回到单线程foreach而不是Parallel.ForEach时,问题就消失了。

乔伊

我经常在我的开发机器上运行时遇到这个exception,特别是在我进行代码更改,重建代码,然后执行相关的网页之后。 但是,如果我将CommandTimeout参数提升到120秒或更长时间(例如,在LINQ语句之前设置context.Database.CommandTimeout = 120),问题就会消失。 虽然这最初是在3年前提出的,但它可能有助于寻找答案的人。 我的理论是VisualStudio需要时间将构建的二进制库转换为机器代码,并在尝试连接到SQL Server之后及时编译时超时。

我有这个错误,它是由App.config中的连接字符串中的拼写错误引起的。

在我的例子中,我通过在连接字符串中添加连接密码来解决错误。

在设置EF模型时,我选择了从连接字符串中排除敏感数据的选项。 因此,最初不包括密码。

试试这个 – 以管理员身份打开命令提示符并输入netsh Winsock reset

重新启动系统,然后重试。

如果您使用的是本地.mdf文件,可能是同步软件(例如Dropbox)尝试在两台不同的计算机中同步两个日志文件(.ldf),您可以从bin目录中删除日志文件,并确保.mdf属性 – >复制输出目录 – >复制如果更新,将复制所选的DB文件并将其登录到bin目录。 !警报 – 如果您的数据库文件仅在bin目录中已更改,则所有更改都将被丢弃!

打开SQL Server配置管理器,然后单击sql server服务列表,将从列表中右键单击sql server并单击start

错误:EntityFramework.SqlServer.dll中出现“System.Data.Entity.Core.EntityException”类型的exception,但未在用户代码中处理其他信息:基础提供程序在Open上失败。

解:

  • 添加模型:

      [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [Key] 
  • 命名空间:

     using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; 
  • 例:

     namespace MvcApplication1.Models { [Table("tblEmployee")] public class Employee { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [Key] public int EmplyeeID { get; set; } public string Name { get; set; } public string Gender { get; set; } public string City { get; set; } } }