2

我被困住了。我花了将近一天的时间来解决,但无济于事。

问题:使用实体框架连接到生产数据库。

我在开发上连接良好。

<add name="DefaultConnectionString" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=MONDO;Integrated Security=True" providerName="System.Data.SqlClient" />

<add name="MONDOEntities" connectionString="metadata=res://*;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQLEXPRESS;Initial Catalog=MONDO;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

转向生产,我使用(来自生产 web.config 文件)现有的“DefaultConnectionString”参数(ID 和密码)来编辑 MONDOEntities 连接字符串。(我可以这样做吗?)此外,我扩展了 MONDOEntities 中的元数据以包括 .csdl、.ssdl、.msl 并在其前面加上(再次猜测,我可以这样做吗?)MONDO。粗体部分是从 dev web.config 到生产 web.config 的更改。*注意,下面的连接字符串不是由 Visual Studio 创建的,我只是自己更改了一些信息以尝试使其在生产端工作。

<add connectionString="Data Source=MPOC\SQLEXPRESS;Database=Mondo;User ID=xxx;Password=xxxxx;" name="DefaultConnectionString" />

<add name="MONDOEntities" connectionString="metadata=res://*/MONDO.csdl|res://*/MONDO.ssdl|res://*/MONDO.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=MPOC\SQLEXPRESS;persist security info=True;Database=Mondo;User ID=xxx;Password=xxxxx;MultipleActiveResultSets=Tru e;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

我得到的错误消息是:无法加载指定的元数据资源。

Line 62: /// Initializes a new MONDOEntities object using the connection string found      in the 'MONDOEntities' section of the application configuration file.
Line 63: /// </summary>
Line 64: public MONDOEntities() : 

问题:我可以简单地手动修改 connectionStrings 还是需要通过编译过程来运行?这是一个网站项目,所以它会在我上传到生产环境后第一次即时编译。它没有在我的本地开发计算机上预编译。我想,底线是,如何为生产中的数据库的实体连接设置正确的 connectionString?


我正在进行一个需要学习现有网站的项目。我正在修复我的第一个错误并学习了 ado.net,我创建了一个实体数据模型并进行了一些代码更改。一切都在开发中顺利进行。

我将文件移至生产环境,然后出现此错误:

"The specified default EntityContainer name 'MONDOEntities' could not be found in the mapping and metadata information.
Parameter name: defaultContainerName"

我用谷歌搜索了这条错误消息,并根据一些发现,我扩展了我的“元数据”,如下所示。这对我来说更像是在黑暗中拍摄:

原始(创建实体数据模型时在 web.config 中自动生成):

connectionString="metadata=res://*

新(我编辑/添加了这个):

connectionString="metadata=res://*/MONDO.csdl|res://*/MONDO.ssdl|res://*/MONDO.msl;

这似乎克服了第一个错误,我收到了一条新的错误消息(如 OP 中发布的):

Unable to load the specified metadata resource.

Line 62: /// Initializes a new MONDOEntities object using the connection string found     in the 'MONDOEntities' section of the application configuration file.
Line 63: /// </summary>
Line 64: public MONDOEntities() :

我认为我的元数据信息有问题。但是,鉴于原始的自动生成的 connectString 仅包含“metadata=res://*”,我真的不知道如何纠正这个问题。实际上,我什至不确定这是问题的根源。

底线,我的实体模型在开发中运行顺利,但在生产中没有连接。任何想法表示赞赏......谢谢。

4

1 回答 1

0

连接字符串与编译无关,只要您没有定义要对其执行的一些转换,或者您有一些对其进行操作的自定义钩子。所以是的,你可以手动修改它。

您可能弄错了这些元数据,尝试使用它们(例如删除前缀)。

您还绝对确定,在您的生产环境中,MONDOEntities 正在加载和使用正确的 connectionString 吗?

于 2012-07-17T19:03:14.307 回答