2013-07-28 108 views
0

我想在Azure Web和Worker角色中使用SQL Server CE數據庫並將它與EF一起使用。我已經安裝了EntityFramework.SqlServerCompact (v4.3.6),並且似乎對worker角色正常工作。 (將數據放入數據庫中)。在Azure Web和Worker角色中共享SQL Server CE數據庫

儘管當我嘗試從我的Web角色讀取數據時,它似乎無法識別由輔助角色創建的數據庫,並創建了一個新的數據庫。

數據庫似乎是由工作者角色\Debug\roles\WorkerRoleName\approot創建的。

什麼是創建數據庫的最佳地點? (Web角色的App_Data?或blob存儲位置?)以及如何配置EF,以便它看起來在同一個地方,無論我要求數據來自哪個角色?

如果SQL Server CE無法實現這個功能,我還有其他選擇嗎? (不想使用SQL Azure的或表存儲)

感謝

回答

2

我想你會發現的SQL Server CE不可行適合你,因爲它是一個本地安裝的數據庫。我不確定您是否使用多個工作角色實例進行了測試,但您應該發現這些實例不會看到彼此的數據(每個實例都是它自己的虛擬機)。 SQL Server CE會將其數據庫文件(.sdf文件?)存儲在實例的本地文件夾中。如果沒有設置某種類型的文件共享,您將無法從安裝的實例以外的任何位置訪問此文件。在開始探索SMB之前,您應該考慮SQL Server CE的工作方式,以及它是否會支持多個試圖讀取/寫入同一文件的數據庫引擎。

我不確定爲什麼要避免使用SQL數據庫(以前稱爲SQL Azure),因爲它是db-as-a-service並且可能被所有角色實例(無論是web還是worker)訪問或從其他地方)。表存儲是完全不同的東西,而不是基於SQL的數據存儲,所以這是有道理的。

另一種選擇是考慮在虛擬機中運行SQL Server,因爲SQL Server像SQL數據庫一樣支持多個客戶端。虛擬機庫中有一個SQL Server映像,您可以使用它來啓動數據庫。然後,您可以使用虛擬網絡或IP-ACL端點保護從雲服務到SQL虛擬機的連接,從而只允許您的雲服務的IP地址訪問它。

+0

@marc_s Windows Azure的數據庫現在被稱爲SQL數據庫(有關更多信息,請參見[這裏](http://www.windowsazure.com/en-us/documentation/services/sql-database/))。這就是爲什麼我把它稱爲SQL數據庫和*不* SQL Server數據庫(它有效地將它的意義從*數據庫即服務*改變爲*獨立數據庫*)。 OP將SQL數據庫稱爲其傳統名稱* SQL Azure *。 Ergo ...我刪除了重命名它的編輯。 –

+0

我會將它標記爲'SQL Azure' - 很明顯。 「SQL數據庫」是一個矛盾--SQL只是查詢語言,而不是產品。而且它絕對是SQL ** Server ** CE--不僅僅是SQL CE。 –

+0

我想避免SQL Azure來降低成本。在虛擬機中運行SQL也無濟於事。是否還有其他選項我錯過了?如果沒有,我將不得不使用SQL Azure來完成我的工作。 – Madushan