在VS2013中,我创建了一个Asp.net WebAPI项目,该项目使用EntityFramework将数据保存/检索到SQL Server数据库中。 SQL Server数据库托管在Azure中。
我有一个在我的Web API项目中执行此操作的Controller类,它一切正常......直到我将我的WebAPI项目发布到Azure然后我得到一个错误:
InnerException: System.Data.SqlClient.SqlException. Message=Invalid object name 'dbo.MyTableName'.
重要的是要注意,当我使用Localhost运行WebAPI项目时,这工作正常。
有谁知道如何调查问题是什么?我已经附加到调试器并提出了一个断点。我可以看到它在这条线上失败了:
db.MyTableName.Find(id);
当我返回一个硬编码值时,它工作正常,所以使用EntityFramwork连接到数据库显然是一个问题。 我的预感是,上传到Azure后,EntityFramework的Model对象的引用路径不正确。在web.config中: 元数据= RES:// * / Model1.csdl ...
我尝试过metadata = res://MyAssemblyName/Model1.csdl ...
我尝试过metadata = res://MyAssemblyName.dll/Model1.csdl ...
但仍有同样的错误。我可以尝试其他任何变化吗?
我还更新了SQL Server / azure FIREWall以确保允许使用正确的IP地址,但这也不是问题。
有什么想法吗?
EDIT 我也试过这些连接字符串没有运气
connectionString="metadata=res://AssemblyName/Model1.csdl|res://AssemblyName/Model1.ssdl|res://AssemblyName/Model1.msl;provider=System.Data.SqlClient;provider connection string="Data Source=tcp:xxx.database.windows.net,1433;Initial Catalog=dev_db;User Id=xxx;Password=xxx;" providerName="System.Data.EntityClient"
connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="Data Source=tcp:xxx.database.windows.net,1433;Initial Catalog=dev_db;User Id=xxx;Password=xxx;" providerName="System.Data.EntityClient"
答案 0 :(得分:0)
对于Azure SQL,您的实体连接字符串应如下所示:
connectionString="metadata=res://*/xxxDataModel.csdl|res://*/xxxDataModel.ssdl|res://*/xxxDataModel.msl;provider=System.Data.SqlClient;provider connection string="data source=xxx.database.windows.net;initial catalog=xxxData;User Id=xxx;password=xxx;MultipleActiveResultSets=True;App=EntityFramework""
答案 1 :(得分:0)
在将代码发布到Azure期间,连接字符串自动更改了。因此,我必须在Azure服务器上编辑web.config文件并重新启动网站并运行