关键字不支持数据源


82

我有一个带有默认成员数据库的asp.net-mvc应用程序。我正在通过ADO.NET实体框架进行访问。

现在,我想将其移至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" />

有什么想法,怎么了?


选择错误的启动项目时出现了此错误,因此VS无法找到我的连接字符串。确保选择带有app.config的启动项目。
wnbates

Answers:


145

您拥有的是有效的ADO.NET连接字符串-但这不是有效的Entity Framework连接字符串。

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

马克

更新:好的,我了解您要执行的操作:您仅需要一个用于ASP.NET用户/成员数据库的“ ADO.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==> Entity Framework连接字符串(以及元数据=和所有内容)。

如果需要并指定providerName=System.Data.SqlClient==>直接ADO.NET SQL Server连接字符串,而无需添加所有EF


实际上,它确实可以,但是随后却出现了异常无法打开物理文件“ C:\ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf”。操作系统错误5:“ 5(未能为此错误检索文本。原因:15105)”。尝试为文件C:\ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf附加自动命名的数据库失败。存在具有相同名称的数据库,或者无法打开指定的文件,或者该数据库位于UNC共享上。从某些来源来看,我认为这是错误的。
Trimack

我不确定我是否理解第二个连接字符串问题。我应该让设计者生成一个,然后添加您写给我的ASPNETMembership吗?
Trimack

如果您的实体在EDMX设计器中-则需要通过“ EntityClient”和EF连接字符串进行访问。如果您使用“现成的” ASP.NET成员资格系统,则它不是EF模型的一部分,因此,当您为ASP.NET成员资格数据库创建连接字符串时,不能将“ EntityClient”用作提供程序-使用SqlClient。
marc_s

所以,是的-你既需要-为您生成EDMX系统的EF连接字符串,PLUS的第二个-正常ADO.NET连接字符串-为ASP.NET成员资格系统。
marc_s

1
刚刚在您的帖子上给了您第100次支持。圣诞快乐:)
RBT

7

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

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

从零开始的连接字符串在您的配置文件中并不总是一个,因为默认情况下它从堆栈的上方继承其他字符串。

推荐的方法是按名称访问您的连接...

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

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

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

2

我遇到了同样的问题。
但是这段代码可以很好地尝试。

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

0

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

解决方案:在通过web.config文件“ add name =“ Entities ” connectionString = XYZ“建立连接的文件中,请确保您所指的是正确的连接,就我而言,我必须这样做

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

    }

每当需要建立连接时,请调用MyEntityFrameworkConnection。

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

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


0

我知道这是一篇旧文章,但最近又遇到了相同的错误,因此,就其价值而言,这是另一种解决方案:

这通常是连接字符串错误,请检查您的连接字符串的格式,您可以查找“实体框架连接字符串”或按照上面的建议进行操作。

但是,就我而言,我的连接字符串很好,并且错误是由完全不同的东西引起的,因此我希望这对某人有帮助:

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

  2. 存储过程错误:我试图添加存储过程,并且每次通过EDMX设计窗口将其添加时,都会出现“数据源”错误。解决方案是将存储过程添加为空白(我保留了存储过程名称和声明,但删除了存储过程的内容,并用“ select 1”替换了它,并尝试将其添加到EDMX中)。有效!据推测,EF不喜欢我存储的过程中的某些东西。将proc添加到EF之后,我便能够将数据库上proc的内容更新为我想要的内容,并且可以正常工作,解决了“数据源”错误。

怪异的


0

我遇到了同样的错误,然后如下更新了我的连接字符串,

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

试试这个,它将解决您的问题。

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.