我有一个带有默认成员资格数据库的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" />

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

有帮助吗?

解决方案

您拥有的是有效的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 = 元素......您基本上只有提供者连接字符串部分。

使用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连接字符串

其他提示

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

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

基于零的连接字符串并不总是配置文件中的字符串,因为它默认情况下从堆栈的上方继承其他人。

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

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

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

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

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

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

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

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

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

    }
每当需要建立连接时,

调用MyEntityFrameworkConnection。

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

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

我知道这是一个很老的帖子,但我最近得到了同样的错误,所以这是值得的,这是另一个解决方案:

这通常是连接字符串错误,请检查连接字符串的格式,您可以查找'entity framework connectionstring'或按照上面的建议。

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

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

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

  3. 古怪

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

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

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

scroll top