我有一个带有默认成员资格数据库的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" />
任何想法,出了什么问题?
答案 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="Data Source=SERVER\SQL2000;Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=False""
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;或遵循上述建议。
但是,在我的情况下,我的连接字符串很好,错误是由完全不同的东西引起的,所以我希望这有助于某人:
首先我遇到了EDMX错误:EDMX中有一个新的数据库表,我的数据库中没有该表(有趣的是错误错误不是很明显因为它没有显示在我的EDMX或输出窗口中,而是隐藏在视觉工作室的“警告&#39;”下的“错误列表”窗口中。我通过将缺少的表添加到我的数据库来解决此错误。但是,我实际上正忙着尝试添加存储过程并仍然获取数据源&#39;错误,请参阅下面的解决方法:
存储过程错误:我尝试添加存储过程,每次通过EDMX设计窗口添加存储过程时,我都会获得一个数据源&#39;错误。解决方案是将存储过程添加为空白(我保留了存储过程名称和声明,但删除了存储过程的内容,并将其替换为&#39;选择1&#39;并重新将其添加到EDMX)。有效!据推测,EF并不喜欢我的存储过程中的某些东西。一旦我将proc添加到EF,我就可以将我数据库中proc的内容更新为我想要的内容并且它可以工作,&#39; datasource&#39;错误已解决。
古怪
答案 5 :(得分:0)
我收到同样的错误,然后更新我的连接字符串,如下所示
<add name="EmployeeContext" connectionString="data source=*****;initial catalog=EmployeeDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
试试这个会解决你的问题。