2012-10-17 152 views
3

我正在嘗試90天的天藍色免費試用版。部署/發佈網站和創建數據庫非常容易,但由於某些原因,我的表格並未在數據庫中創建。我使用實體框架4.4(我相信)並編寫第一次遷移。我讀過azure使用自己的連接字符串,但我繼續並改變了我的連接字符串。我花了幾個小時,我無法弄清楚什麼是錯的,爲什麼我的表沒有被創建。我部署網站,啓用遷移,添加遷移,更新數據庫,然後發佈並選中代碼優先複選框。也許我的連接字符串錯了?任何幫助是極大的讚賞。將MVC 4 CodeFirst部署到Azure

在 'MyProject.Web' web.config中:

<configSections> 
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 

<connectionStrings> 
<add name="DefaultConnection" connectionString="Data Source=tcp:n98my***.database.windows.net,1433;Initial Catalog=slutips_db;User Id=****;Password=****;" /> 
</connectionStrings> 

然後在 'MyProject.Data' 的app.config,那裏有我datacontext.cs舉行:

<entityFramework> 
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
<contexts> 
    <context type="SeluCmpsTutorials.Data.DataContext"> 
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion"> 
     <parameters> 
     <parameter value="slutips_db"/> 
     </parameters> 
    </databaseInitializer> 
    </context> 
</contexts> 
</entityFramework> 
  • 另外我注意到即使所有的連接字符串都改變了,當我添加遷移和更新數據庫時,它仍然使用./sqlexpress本地數據庫,這怎麼可能?
+1

你找到一個解決辦法? –

回答

3

關鍵疑難雜症要知道關於SQL Azure的連接:用戶ID爲它實際上通常需要以用戶ID @服務器的名字 - 會讀youruserid @ n98my ***在ConnectionString

。此外,不知道你是否需要「tcp:」(不使用它),你可能也想添加providerName =「System.Data.SqlClient」

+0

感謝您的評論,仍然沒有運氣。我幾乎相信它不是我,而是一個天青數據庫代碼第一次遷移的bug。它不想工作。 – TMan

+0

但是我相信它可能是一個連接字符串問題,因爲在包管理器中我看到當我啓用遷移和更新數據庫時,即使將連接字符串設置爲我的天藍色帳戶,它也適用於本地數據庫。不知道爲什麼。 – TMan

2

您的db用戶是否具有修改數據庫所需的權限? 您是如何設置用戶的?

最初,你應該爲天青的SQL Server創建登錄,sometihing這樣的: (執行以下服務器主數據庫的SQL,與實際值進行替代的角度,括號中的數值)

CREATE LOGIN [<SomeServerLogin>] WITH PASSWORD=N'<somepassword>'

然後連接到您的slutips_db數據庫爲admin並執行以下sql

CREATE USER [<slutips_db_user>] FROM LOGIN [<SomeServerLogin>]; 
GO; 
EXEC sp_addrolemember 'dbmanager', '<slutips_db_user>'; 
GO; 
EXEC sp_addrolemember 'loginmanager', '<slutips_db_user>'; 
GO; 

「dbmanager」角色允許表創建\管理。

「loginmanager」角色可以在當前數據庫中的另一個用戶的創建(您slutips_db_user將被允許執行CREATE USER <slutips_db_user1> FROM LOGIN <SomeServerLogin1>條款

EDIT1:也 - 確保您的連接字符串的用戶具有用戶@ n98my ***(用戶@ 。服務器)格式

+0

我正在使用新的門戶視圖azure正在開發,所以當你創建一個網站時,如果你需要創建一個數據庫和一個新的sql實例,包括創建用戶名和密碼來訪問服務器。所以我不確定我會如何去做你的建議。 – TMan

+0

如果您安裝了SQL管理工具(它非常方便 - 我強烈建議您安裝並使用它),您可以簡單地連接sql azure實例。如果你沒有它 - 只需進入portal-> db->你的db->點擊管理 - 有一個簡單的基於silverlight的管理工具 - 你可以在那裏執行提供的SQL。 您的數據庫的鏈接應該是這樣的 https://n98my***.database.windows.net/#$database=slutips_db –

+0

我在嘗試執行時遇到此錯誤:CREATE USER語句必須是隻在批處理中聲明。 – TMan

0

如果你按照本教程:https://www.windowsazure.com/en-us/develop/net/tutorials/web-site-with-sql-database/它會告訴你如何連接與Azure的Visual Studio(2012年在這個例子中,不知道是否適用於其他人) - 基本上你想要登錄到門戶,並下載發佈憑證。這將包含您的數據庫連接字符串,然後您可以使用該字符串將代碼第一次遷移推送到Azure。

看起來您已經完成的工作是自己手動添加到app.config的屬性中。發佈的工作方式,它定義了一個本地版本。像這樣的配置文件:

<entityFramework> 
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
    <parameters> 
    <parameter value="v11.0" /> 
    </parameters> 
</defaultConnectionFactory> 

然後,當你發佈,VS會自動神奇地插入所需的東西進入你的.config - 如果我去和FTP到我的網站,並查看生成的config文件,你會看到這一點:

<contexts> 
    <context type="Web_App.Models.TrackSafeDb, Web App"> 
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[Web_App.Models.TrackSafeDb, Web App], [Web_App.Migrations.Configuration, Web App]], EntityFramework, PublicKeyToken=*******************"> 
     <parameters> 
     <parameter value="Web_App.Models.TrackSafeDb_DatabasePublish" /> 
     </parameters> 
    </databaseInitializer> 
    </context> 
</contexts> 

所以我想嘗試從當地的app.config並重新發布

+0

生成的配置文件位於何處? –

+2

如果將源代碼管理(TFService或Git)部署用於Azure,您如何執行遷移? –

+0

精彩的問題馬克,我一直渴望知道的東西:) – Jack

0

嘗試增加加密連接字符串去除多餘的東西。 ..

<connectionStrings> 
<add name="DefaultConnection" connectionString="Data Source=tcp:n98my***.database.windows.net,1433;Initial Catalog=slutips_db;User Id=****;Password=****;Integrated Security=False;Persist Security Info=True;Encrypt=True" /> 
</connectionStrings> 
0

我所做的就是去我的天藍色管理門戶。 點擊數據庫。 去視圖連接字符串,然後直接複製到我的相關配置。 在我的情況下,它的「發佈」配置。

確保Web配置轉換已啓用並正常工作。

也確保您已啓用對每個數據庫的防火牆訪問... 您必須單擊「啓用連接通過防火牆」或類似的東西。 它在門戶網站的數據庫選項。

0

看了這個問題幾天後,有幾個想法。首先,你的上下文的名字是事實上的DefaultConnection。實體框架(爲了與無參數構造函數一起使用)喜歡連接字符串名稱以匹配上下文的名稱。

舉例來說,如果你的聲明一個新的上下文變量這樣:

var context = new MyEntities(); 

然後在連接字符串應該叫MyEntities

<connectionStrings> 
<add name="MyEntities" connectionString="Data Source=tcp:n98my***.database.windows.net,1433;Initial Catalog=slutips_db;User Id=****;Password=****;" /> 
</connectionStrings> 

其次,你100%肯定不存在web.config轉換文件和/或您還正確地更新了這些文件中的連接字符串?

第三,請記住,在部署時,除web.config以外的任何配置文件基本上都會被忽略。正在執行的程序集是Web應用程序,而不是數據項目或任何其他程序。任何與EF設置和部署相關的配置都應該位於web.config文件中(如您在數據app.config中的代碼段)

0

我有完全相同的問題,並且它與我的密碼鏈接, %'字符。 我檢查了Azure上使用ftp連接生成的web.config,並將包含'95%a'的密碼部分自動轉換爲'95'...。這可能是azure的Web部署功能中的一個錯誤,因爲我的發佈配置文件中的密碼在本地是正確的。

如果確實造成密碼數據庫生成的連接字符串中被損壞,你必須將其復位:

  • 在Windows Azure管理,在SQL數據庫選項卡,選擇服務器列表(不數據庫列表),並單擊您的服務器
  • 在儀表盤上,有一個鏈接重設管理員密碼
  • 在Visual Studio中,您發佈的個人資料的的connectionString(設置更新密碼,數據庫)
  • 進行更改到web.conf IG(一個真實的,而不是評論),否則將無法重新發布
  • 發佈,並在第一次使用的數據庫中,遷移將被應用