2016-03-06 83 views
1

我将一个webapi项目部署到Azure,通过DbContext连接到数据库。一切工作在本地,但是当我部署时,我碰到一个错误,只要我提出需要访问我的DbContext的请求。数据库第一个DBContext在本地工作,但在部署时不工作

我打开一个连接如下:

public ProductRepo(ProdStoreEntities context) 
     { 
      dbContext = context; 
      dbContext.Database.Connection.Open(); 
     } 

我的web.config如下:

<connectionStrings> 
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-CatalogAPI-20160227031830.mdf;Initial Catalog=aspnet-CatalogAPI-20160227031830;Integrated Security=True" providerName="System.Data.SqlClient" /> 
    <add name="ProdStoreEntities" connectionString="metadata=res://*/DbCache.csdl|res://*/DbCache.ssdl|res://*/DbCache.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLEXPRESS;initial catalog=ProdStore;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 

我本来以为一切都会对我来说,因为我使用的DbContext处理但是当我部署并试图发出需要数据库查询的get请求时,我收到以下错误:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

关于为什么会发生这种情况的任何想法?发布时我没有做任何特别的事情,我从字面上点击右键菜单并点击发布。如果重要的话,我首先通过数据库优先方法生成DbContext。

回答

2

这可能来自一些事情。

检查所部署的服务器上运行的LocalDB

其次,检查数据库已经intialized部署的服务器上。

第三,你能够通过您所提供的凭证通过管理工作室登录数据库 - 确保您的用户资料已部署的服务器上的权限来访问数据库

+0

我使用Windows身份验证在本地登录数据库。但我不希望我部署的Web服务访问我的本地数据库。我希望将我的数据库的副本发布到我的web api项目的一侧。我以为这是自动的,因为我使用DbContext?我的假设是否不正确? – Programmer

+0

DbContext将负责数据库设置,但它首先需要能够连接到可以创建数据库的地方。正如下面的Chimera指出的那样,连接字符串指向本地数据库。你需要指定一个连接字符串到你的已部署数据库的托管位置,然后创建一个空的数据库或使用迁移等。当你的DbContext将负责其他的事情。 – Oliver

+0

因此,我在azure上创建一个空数据库,获取它的连接字符串并在发布时将其放入设置选项卡中?然后,我的DbContext会创建我的本地数据库的一个副本,并将其置于天蓝色的环境中?或者我将不得不手动配置Azure数据库以匹配我的本地数据库? – Programmer

0

你的问题是,你的连接字符串表示它是一个本地数据库。 你需要做的是在Azure中创建一个数据库,当你这样做时,你实际上可以看到一个到该数据库的连接字符串,该连接字符串需要替换你当前的连接字符串,你有你的(本地)分区

相关问题