实体框架 - 基础提供程序在 ConnectionString 上失败
Posted
技术标签:
【中文标题】实体框架 - 基础提供程序在 ConnectionString 上失败【英文标题】:Entity Framework - The underlying provider failed on ConnectionString 【发布时间】:2011-01-10 15:49:18 【问题描述】:在使用实体框架时,我已将其拆分为自己的项目:
RivWorks.Model - 包含实体模型 RivWorks.Controller - 使用实体模型并包含商业规则 RivWorks.View.Web - 网站 RivWorks.View.Services - WCF 项目网站上的一切都运行良好。我可以调用控制器并返回一个有效的模型。当我从 Web.Service 尝试同样的事情时,我收到了这个错误:
错误: ConnectionString 上的基础提供程序失败。 堆栈跟踪: 在 System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString) 在 System.Data.EntityClient.EntityConnection..ctor(String connectionString) 在 System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString) 在 System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName) 在 RivWorks.Model.Entities.RivFeedsEntities1..ctor(String connectionString) 在 RivWorks.Model.FeedStoreReadOnly..ctor(String connectionString) 在 RivWorks.Controller.ProductManager.LookupProduct(String productID, String sku, String urlRef, String env, String logPath)
我有点困惑,为什么并仔细研究错误日志,我终于发现连接字符串没有从网站的配置文件中读取。所以,我添加了一些代码来捕捉它,现在,硬编码了这些值。喜欢:
public dataObjects.NegotiateSetup LookupProduct(string productID, string sku, string urlRef, string env, string logPath)
string feedConnString = "";
string rivConnString = "";
log.InitializeLogFile(logPath);
dataObjects.NegotiateSetup resultSet = new dataObjects.NegotiateSetup();
try feedConnString = AppSettings.FeedAutosEntities_connString;
catch feedConnString = @"metadata=res://*/Entities.FeedEntities.csdl|res://*/Entities.FeedEntities.ssdl|res://*/Entities.FeedEntities.msl;provider=System.Data.SqlClient;provider connection string='Data Source=***.***.***.***;Initial Catalog=******;Persist Security Info=True;User ID=******;Password="******";MultipleActiveResultSets=True'";
try rivConnString = AppSettings.RivWorkEntities_connString;
catch rivConnString = @"metadata=res://*/Entities.RivEntities.csdl|res://*/Entities.RivEntities.ssdl|res://*/Entities.RivEntities.msl;provider=System.Data.SqlClient;provider connection string='Data Source=******;Initial Catalog=******_Dev;Persist Security Info=True;User ID=******;Password="******";MultipleActiveResultSets=True'";
try
using (RivFeedsEntities1 _dbFeed = new FeedStoreReadOnly(feedConnString).ReadOnlyEntities())
using (RivEntities _dbRiv = new RivWorksStore(rivConnString).NegotiationEntities())
但是,唉,它仍然给我上面的错误!任何想法为什么?
【问题讨论】:
在 MSDN 上找到一个帖子,一年多没有回答。好难过,好难过。 social.msdn.microsoft.com/Forums/en/adodotnetentityframework/… 【参考方案1】:我知道你一直在弄乱你的连接字符串来清理它们,但我猜你没有在密码周围输入"
?
他们真的需要吗?
【讨论】:
EntityFramework 以类似的方式存储其连接字符串,尽管我的"
来自 provider connection string=
,这可能是 Keith 出错的地方:metadata=res://*/Models.DoodleEF.csdl|res://*/Models.DoodleEF.ssdl|res://*/Models.DoodleEF.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SqlExpress;Initial Catalog=zhpCoreContent;Integrated Security=True;MultipleActiveResultSets=True""
它们是直接从 App.Config 中复制出来的。我为 web.config 做了同样的事情 - 但等等 - 硬编码不理解“。 仔细检查您的连接字符串是否正确,小错字可能会导致同样的错误。
这是错误的:
<add name="Entities" connectionString="metadata=res://*/OnlineAB.csdl|res://*/OnlineAB.ssdl|res://*/OnlineABSuperAdmin.msl;provider=System.Data.SqlClient;provider connection string="data source.;initial catalog=
这是对的:
<add name="Entities" connectionString="metadata=res://*/OnlineAB.csdl|res://*/OnlineAB.ssdl|res://*/OnlineABSuperAdmin.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=
在 DataSource 之后查看我缺少一个等号。
【讨论】:
以上是关于实体框架 - 基础提供程序在 ConnectionString 上失败的主要内容,如果未能解决你的问题,请参考以下文章
实体框架 6 错误服务器版本:(System.Data.SqlClient.SqlConnection)customerOrderContext.Database.Connection).Server