关键字不支持的数据源

时间:2009-09-10 09:28:11

标签: asp.net entity-framework connection-string

我有一个带有默认成员资格数据库的asp.net-mvc应用程序。我正在通过ADO.NET Entity Framework访问它。

现在我想把它移到IIS,但是出现了几个问题。我不得不安装SQL Server Management Studio,创建新数据库,导入前一个.MDF文件中的所有数据。只剩下要做的事情(据我所知)是改为连接字符串。但是,我对此并不十分熟悉并且不断支持关键字:'数据源'。例外。这是我的连接字符串:

<add name="ASPNETDBEntities" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.EntityClient" />

任何想法,出了什么问题?

6 个答案:

答案 0 :(得分:122)

您拥有的是有效的ADO.NET连接字符串 - 但它是 NOT 有效的实体框架连接字符串。

EF连接字符串看起来像这样:

<connectionStrings> 
  <add name="NorthwindEntities" connectionString=
     "metadata=.\Northwind.csdl|.\Northwind.ssdl|.\Northwind.msl;
      provider=System.Data.SqlClient;
      provider connection string=&quot;Data Source=SERVER\SQL2000;Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=False&quot;" 
      providerName="System.Data.EntityClient" /> 
</connectionStrings>

您错过了EF连接字符串中的所有metadata=providerName=元素......您基本上只拥有provider connection string部分中包含的内容。

使用EDMX设计器应该在web.config或app.config中为您创建有效的EF连接字符串。

马克

更新:好的,我明白你要做的是:你需要第二个“ADO.NET”连接字符串,仅用于ASP.NET用户/成员资格数据库。你的字符串没问题,但是providerName是错误的 - 它必须是“System.Data.SqlClient” - 这个连接不使用ENtity Framework - 不要为它指定“EntityClient”!

<add name="ASPNETMembership" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.SqlClient" />

如果您指定providerName=System.Data.EntityClient ==&gt; 实体框架连接字符串(包含元数据=和所有内容)。

如果您需要并指定providerName=System.Data.SqlClient ==&gt; 直接ADO.NET 没有添加所有EF的SQL Server连接字符串

答案 1 :(得分:5)

当您通过索引引用web.config(或app.config)连接字符串时,可能会发生此问题...

var con = ConfigurationManager.ConnectionStrings[0].ConnectionString;

基于零的连接字符串并不总是配置文件中的inherits others by default from further up the stack

建议的方法是按名称访问您的连接...

var con = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;

或首先清除配置文件中的connnectionStrings元素......

<connectionStrings>
    <clear/>
    <add name="MyConnection" connectionString="...

答案 2 :(得分:2)

我遇到了同样的问题 但是这段代码很好用。

<add name="MyCon" connectionString="Server=****;initial catalog=PortalDb;user id=**;password=**;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />

答案 3 :(得分:0)

当我开始使用Entity Framework时,我遇到了这个问题,当我没有将旧的SQL服务器连接更改为EntityFrameWork连接时,就发生了这种情况。

解决方案: 在通过web.config文件进行连接的文件中“add name =”实体“connectionString = XYZ”, 确保你指的是正确的连接,在我的情况下我必须这样做

        public static string MyEntityFrameworkConnection
    {
        get
        {
             return ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
        }

    }
每当需要建立连接时,

调用MyEntityFrameworkConnection。

private string strConnection= Library.DataAccessLayer.DBfile.AdoSomething.MyEntityFrameworkConnection;

注意:将Entity模型添加到解决方案时,将自动生成web.config文件中的连接。

答案 4 :(得分:0)

我知道这是一篇很老的帖子,但我最近也遇到了同样的错误,因为它的价值,这是另一个解决方案:

这通常是连接字符串错误,请检查连接字符串的格式,你可以查看实体框架connectionstring&#39;或遵循上述建议。

但是,在我的情况下,我的连接字符串很好,错误是由完全不同的东西引起的,所以我希望这有助于某人:

  1. 首先我遇到了EDMX错误:EDMX中有一个新的数据库表,我的数据库中没有该表(有趣的是错误错误不是很明显因为它没有显示在我的EDMX或输出窗口中,而是隐藏在视觉工作室的“警告&#39;”下的“错误列表”窗口中。我通过将缺少的表添加到我的数据库来解决此错误。但是,我实际上正忙着尝试添加存储过程并仍然获取数据源&#39;错误,请参阅下面的解决方法:

  2. 存储过程错误:我尝试添加存储过程,每次通过EDMX设计窗口添加存储过程时,我都会获得一个数据源&#39;错误。解决方案是将存储过程添加为空白(我保留了存储过程名称和声明,但删除了存储过程的内容,并将其替换为&#39;选择1&#39;并重新将其添加到EDMX)。有效!据推测,EF并不喜欢我的存储过程中的某些东西。一旦我将proc添加到EF,我就可以将我数据库中proc的内容更新为我想要的内容并且它可以工作,&#39; datasource&#39;错误已解决。

  3. 古怪

答案 5 :(得分:0)

我收到同样的错误,然后更新我的连接字符串,如下所示

<add name="EmployeeContext" connectionString="data source=*****;initial catalog=EmployeeDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

试试这个会解决你的问题。