Azure:上下文在 Code First 模式下使用,代码是从 EDMX 生成的
Posted
技术标签:
【中文标题】Azure:上下文在 Code First 模式下使用,代码是从 EDMX 生成的【英文标题】:Azure: The context is being used in Code First mode with code that was generated from an EDMX 【发布时间】:2015-09-25 05:52:50 【问题描述】:我的 MVC 应用程序在本地运行良好。更新到Azure后开始报错:
上下文在 Code First 模式下使用,代码是从 EDMX 文件生成的,用于 Database First 或 Model First 开发。这将无法正常工作。要解决此问题,请不要删除引发此异常的代码行。如果您希望使用 Database First 或 Model First,请确保 Entity Framework 连接字符串包含在启动项目的 app.config 或 web.config 中。
我检查了本地 web.config 和 azure web.config 之间是否有任何区别。除了凭证,一切都一样。上面写着:
<add name="DBEntities"
connectionString="metadata=res://*/DBModel.csdl|res://*/DBModel.ssdl|res://*/DBModel.msl;
provider=System.Data.SqlClient;
provider connection string="data source=xx;initial catalog=xx;persist security info=True;user id=xx;password=xx;MultipleActiveResultSets=True;application name=EntityFramework""
providerName="System.Data.EntityClient" />
我使用的是 EF 6.1.3,MVC5
【问题讨论】:
【参考方案1】:我遇到了同样的错误消息,并在this post here on *** 的帮助下设法解决了它。
在 Azure Management / Web Apps / [Your web app] / CONFIGURE / connection strings 中,确保三件事:
连接字符串与项目中的连接字符串同名。
连接字符串值包含项目中连接字符串中显示的所有元数据。我的看起来像这样:
metadata=res://\*/Models.[MyModel].csdl|res://\*/Models.[MyModel].ssdl|res://\*/Models.[MyModel].msl;provider=System.Data.SqlClient;provider connection string="Server=tcp:[myDBServer].database.windows.net,1433;Database=[myDB];User ID=[myDBUser]@[myDBServer];Password=[myPassword];Trusted_Connection=False;Encrypt=True;Connection Timeout=30;"
第三列(默认设置为 SQL 数据库)设置为 自定义
【讨论】:
【参考方案2】:找到了一个比在 Azure 连接字符串中添加所有内容更简单的解决方案。我刚刚更改了 Azure 中的连接字符串名称。成功了。。
【讨论】:
【参考方案3】:我不得不处理同样的问题。解决办法是
-
通过 FTP 连接到网站
编辑 web.config
添加以下连接字符串:
添加 name="NewDatabaseEntities" connectionString="metadata=res:///NewDatabase.csdl|res:///NewDatabase.ssdl|res://*/NewDatabase.msl;provider =System.Data.SqlClient;provider connection string="Data Source=tcp:your.database.windows.net,1433;初始目录=your;集成安全=False;User Id=your;Password=your;MultipleActiveResultSets=True; App=EntityFramework"" providerName="System.Data.EntityClient"
感谢 Microsoft 对 Azure 上的 EntityFramework Database First 的糟糕文档。
【讨论】:
【参考方案4】:您需要更改此行metadata=res:///NewDatabase.csdl|res:///NewDatabase.ssdl|res://*/NewDatabase.msl;
致metadata=res://*/;
【讨论】:
以上是关于Azure:上下文在 Code First 模式下使用,代码是从 EDMX 生成的的主要内容,如果未能解决你的问题,请参考以下文章
Entity Framework 5.0系列之自动生成Code First代码
EntityFramework Code First 模式下使用数据迁移
14.翻译系列:从已经存在的数据库中生成上下文类和实体类EF 6 Code-First系列
Microsoft Azure Tutorial: Build your first movie inventory web app with just a few lines of code(示例代