0

我有两个独立的项目,一个用于数据交互,另一个用于 WebUI。

WebUI 项目根目录中的 web.config 具有以下连接字符串:

<add name="MySiteEntities" connectionString="metadata=res://*/MySite.csdl|res://*/MySite.ssdl|res://*/MySite.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=tcp:**********.database.windows.net,****;initial catalog=MySite;user id=username@**********;password=*******;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

EDMX(数据库优先)生成的 dbcontext 具有以下内容:

public partial class MySiteEntities : DbContext
{
    public MySiteEntities()
        : base("name=MySiteEntities")
    {
    }
...

当我在本地运行站点时,实体框架会找到连接字符串并成功连接到数据库。

但是,当我发布时,实体框架似乎找不到连接字符串,而是抛出一个UnintentionalCodeFirstException.

我在这里到底做错了什么?

4

2 回答 2

0

调试的第一步是确保您了解引发的异常。根据MSDN 文档UnintentionalCodeFirstException是:

在 Database First 或 Model First 模式下从 DbContext 模板生成上下文时引发的异常,然后在 Code First 模式下使用。

这不是非常有帮助,但它确实为您提供了一些线索:您使用 Database First 或 Model First 生成了上下文,但现在由于某种原因,上下文认为它应该是 Code First。

基于此的一点搜索让我得到了:不要错误地使用 Code First,它在解释可能的原因方面做得很好。我建议你读一读,看看是否有什么适合你的。

我最好的猜测是,由于这在本地而不是远程有效,因此与您的连接字符串对应的 EDMX 映射无论出于何种原因都没有进行跳转。如果您正在使用源代码控制,那么它可能没有被提交。如果没有此映射,EF 将导致代码优先策略,该策略将导致此异常。

于 2013-04-01T19:35:12.587 回答
0

我认为您的连接字符串中的数据源值中不需要“tcp:”。我的天蓝色应用程序的配置中没有它,它工作正常。

于 2013-04-01T19:41:30.343 回答