EF 4.1异常“提供程序未返回ProviderManifestToken字符串”


88

我正在尝试复制在MSDN上找到的示例。我正在使用ASP.NET和EF 4.1(CTP?)。我已经使用NuGet来安装EntityFramework软件包。

我收到此错误:The provider did not return a ProviderManifestToken string...并且从未创建数据库。

这是我的连接字符串:

<add name="HospitalContext"
   connectionString=
   "data source=.\SQLExpress;initial catalog=NewTestDB;integrated security=True;"
   providerName="System.Data.SqlClient"/>

这是我的代码:

var pat = new Patient { Name = "Shane123132524356436435234" };
db.Patients.Add(pat);

var labResult = new LabResult { Result = "bad", Patient = pat };

int recordAffected = db.SaveChanges();

这是我的上下文:

public class HospitalContext : DbContext
{
    static HospitalContext()
    {
        Database.SetInitializer(new HostpitalContextInitializer());
    }

    public DbSet<Patient> Patients { get; set; }
    public DbSet<LabResult> LabResults { get; set; }
}

public class HostpitalContextInitializer :
             DropCreateDatabaseIfModelChanges<HospitalContext>
{
    protected override void Seed(HospitalContext context)
    {
        context.Patients.Add(new Patient { Name = "Fred Peters" });
        context.Patients.Add(new Patient { Name = "John Smith" });
        context.Patients.Add(new Patient { Name = "Karen Fredricks" });
    }
}

这是带有VS 2010 SP1的完全修补的SQL 2008系统。


在为模型添加[Key]之后,它似乎可以解决该问题。我还有另一个问题,但这可能已经解决了。
bugnuker 2011年

另外,可能是我在连接字符串中添加了“集成安全性= true” ...
bugnuker 2011年

与我一起工作时遇到同样的例外SqlServerCe.Entity.dll
Nano Taboada

2
为了能够引起这种异常的事情发生,我花了20分钟的时间盯着拼写错误,然后输入必须与上下文名称匹配的连接字符串名称。
justSteve 2012年

Answers:


184

我遇到此错误,并尝试了一些较早的建议。然后,我检查了内部异常,发现我遇到了一个简单的SQL登录失败。只是其他检查。


就我而言,SQL服务器密码已过期
mklein 2011年

3
感谢您指出正确的方向。我的SQL Express服务没有启动-h!
camainc

好的,是内部异常。当我将EF指向一个新的备份位置时,我的数据库名称错误。
安迪·丹格·加涅

使用集成安全性时,IIS AppPool没有所需的权限。
Vincent Vancalbergh 2012年

+1-(更改了我的家庭IP)错误消息:无法打开登录请求的服务器“ SERVERNAME”。IP地址为“ MY_OLD_IP”的客户端不允许访问服务器。若要启用访问,请使用SQL Azure门户或在master数据库上运行sp_set_firewall_rule来为此IP地址或地址范围创建防火墙规则。更改最多可能需要五分钟才能生效。\ r \ n用户'MYADMINACCT'的登录失败。\ r \ n此会话已被分配了跟踪ID'GUID'。当您需要帮助时,请将此跟踪ID提供给客户支持。“}
Dylan Hayes

8

有时将连接字符串放在Visual Studio中错误项目的app.config中时,可能会发生这种情况。

例如,我在EF 4.1(发行版)项目+ WCF数据服务项目中遇到了这个问题,并且我注意到在使用该数据服务的项目中没有指定连接字符串。


这是我的解决方案。我必须在启动项目中放入正确的连接字符串。
MickJuice 2014年

5

我遇到了同样的错误,实际上是指定服务器的登录失败。我从配置连接字符串中删除了“集成安全性”属性,并且该属性有效。


这对我有用。如果其他解决方案无效,则遇到此问题的其他任何人都应尝试此操作。
贾斯汀2012年

在我的计算机上关闭SQL Express服务时,导致此错误。
John M

4

我遇到了同样的问题,我在上下文实例之后添加了以下代码(例如,onload)

context.Database.Connection.ConnectionString = @"Data Source=.\SQLExpress;Initial Catalog=Test;Integrated Security=True";

4

我在MvcMusicStore应用程序中遇到了类似的问题。我将Web.config中的一行从“ Instance = true”更改为“ Instance = false”。有时无需进行此调整即可工作,但我不知道是什么导致了差异。阅读此 http://msdn.microsoft.com/zh-cn/library/ms254504.aspx并没有真正的帮助。


太神奇了……这对我来说是正确的解决方案。我不知道为什么。
Kees C. Bakker

2

由于某些许可原因,EF无法创建数据库连接。我整天都面临着同样的问题。最终,我尝试了以下解决方案,该方法成功了:a /打开IIS(我正在使用IIS 7)b /打开正在使用网站的appool的高级设置(例如:DefaultAppPool)c /查看“流程模型”组,更改“标识”值到“本地系统”

希望它与您合作。


2

我只是遇到了同样的问题...
适用于我的解决方案是:
运行客户端网络配置工具(在“运行”中键入cliconfg)
并确保启用了TCP / IP。


2

我终于破解了它-经过一番狂野的追赶,认为这是由于许可所致。

启示录:USE SQL PROFILER

(注意:我最近从EF6降级为EF5)

使用SQL事件探查器,我迅速找到了报告的故障之前执行的最后一个SQL:

SELECT TOP (1) 
[Project1].[C1] AS [C1], 
[Project1].[MigrationId] AS [MigrationId], 
[Project1].[Model] AS [Model]
FROM ( SELECT 
    [Extent1].[MigrationId] AS [MigrationId], 
    [Extent1].[Model] AS [Model], 
    1 AS [C1]
    FROM [dbo].[__MigrationHistory] AS [Extent1]
)  AS [Project1]
ORDER BY [Project1].[MigrationId] DESC

好好看一下-与迁移有关。它在__MigrationHistory表中查找-我什至没有意识到它已经创建了(我已经在CSPROJ中清除了Migrations)并清除了它。

因此,我拉起了该表的行,并看到它与特定的产品版本(v6)相关联。

在此处输入图片说明

实际上,我从EF6(我本来不想安装的)降级到EF5(与脚手架更兼容),而在问题开始时降级了。

我的猜测是该Model (<Binary data>)列不向后兼容-因此出现The provider did not return a ProviderManifest instance错误,因为它无法对其进行解码。

我没有什么可失去的,只是彻底清除了这张桌子Update-Database -Verbose,然后跑了,然后又恢复了运行。

如果您处于高级环境中或已经投入生产,那么清除此表可能不是解决方案,但是这种方式使我可以立即恢复工作。


我最终完全删除了__MigrationsHistory表,并用Add-Migration和重新折叠Update-Database -Verbose -Force。这是命令参考encoding.abel.nu/2012/03/ef-migrations-command-reference
Simon_Weaver

重要的是,这不仅仅是权限错误
Simon_Weaver

1

在将Visual Studio 11 Beta与EF4.1和ASP.NET MVC结合使用时,我几乎把头发拔了出来,直到发现

http://connect.microsoft.com/VisualStudio/feedback/details/740623/asp-net-mvc-4-default-connection-string-improperly-escaped

为了解决我的问题,我进入了Application_Start并进行了更改

Database.DefaultConnectionFactory =新的SqlConnectionFactory(“数据源=(localdb)\ v11.0;集成安全性= True; MultipleActiveResultSets = True”);

Database.DefaultConnectionFactory =新的SqlConnectionFactory(@ “数据源=(localdb)\ v11.0;集成安全性= True; MultipleActiveResultSets = True”);


Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");被添加到我的方法中Main,现在它就像一种魅力!非常感谢。
rotgers's

1

仅在打开.edmx文件时出现此错误,并在再次关闭文件时消失。

这是CodePlex的引文 ,与我合作(Visual Studio 2013 / MVC 5)


也和我一起工作。尝试关闭并重新打开edmx文件。工作了。
罗希特2014年

1

如果您使用的是EF Code First,则需要考虑的另一件事是,有时它不会自动创建DbContext类的支持数据库。解决方案是添加您自己的连接字符串-您可以使用可能存在的连接字符串来处理支持简单成员资格提供程序的用户/注册数据库作为模板。最后,您将需要为创建的DbContext类添加默认的构造函数:

public ChaletDb():base("ChaletConnection")
    {

    }

在这里,您在web.config文件中输入的连接字符串的名称用于指导DbContext创建数据库。偶尔,我不得不手动创建数据库(在SQL Server Management Studio中),促使数据库正常工作。


0

我在一个解决方案中有多个项目,并在不同的时间向每个项目添加了EF。在某些机器上它正在工作,而在某些机器上却由于上述错误而失败。我花了一段时间才注意到我项目的某些app.config包含以下内容:

    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>

如果您使用LocalDb(如新的“ sql express”),这是可以的,但是如果您没有安装该特定服务器并使用常规SQL,则完全错误。

解决方案:删除上面的代码。


0

这是因为与SQL Server的连接失败。

确保在其下运行该进程的用户帐户可以访问SQL Server。

如果从父线程生成了DbContext(例如使用依赖项注入),然后模拟了另一个用户,则将发生此错误。解决方案是在新线程或新的模拟上下文中生成DbContext。


0

我只是关闭了Visual Studio的所有实例,然后重新打开了我的解决方案。

我不知道真正发生了什么,但是我从两个不同的本地工作空间(一个进行了本地更改,一个更改了存储库源代码)打开了相同的解决方案。我使用Postgres DB,Entity Framework 6,Visual Studio 2013和ASP.NET MVC 5。


0

我对实体框架有一个错误,但是以上答案都没有适合最终解决方案。

我的EntityFramework Code First模型和DataContext与WebAPI主项目位于一个单独的项目中。我的Entity Framework Project在编码下的某个位置被设置为启动项目,因此,当我运行迁移时,我遇到“提供程序未返回ProviderManifestToken字符串” ...连接问题。

事实证明,由于到DB的ConnectionString位于WebAPI Main项目中的Web.config文件中,所以当我运行迁移时,未检索到连接字符串。通过将WebAPI项目设置为我的startProject,我能够成功连接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.