2013-05-30 50 views
0

我有一個WPF項目設置爲通過Visual Studio Express 2012 for Desktop中的ADO.NET實體數據模型使用本地SQL Server Compact數據庫。該項目運行良好,第一次運行時我可以加載所有數據,隨心所欲地操作它,稍後再將更改後的數據放回原處。WPF + SQL Server Compact調試和部署

我注意到,雖然對VS可見的數據只做了一小部分重構,但這只是我在創建數據庫時手動輸入的第一位數據,而下一次我編譯了自從我添加的所有數據失去了!

經過一番深入的研究,我得出結論:應用程序的編譯版本使用通過文件的Content:Copy If Newer構建動作發送到bin/Debug文件夾的SDF文件。這意味着可能有多達4個不同的數據庫副本需要擔心:項目文件夾,調試文件夾,發佈文件夾以及最終用戶PC上的部署副本。

我希望在我的開發機器上有一個單獨的副本,可以通過ClickOnce安裝在最終用戶的PC上,由調試和發佈編譯版本以及VS中的數據庫資源管理器訪問。我想我可以在開發過程中將連接字符串更改爲絕對路徑,並希望在發佈進行部署前,我可以記住將其更改回相對路徑。

最後,我預見還需要爲這個應用程序發佈更新,並且擔心如果這樣的更新會在最終用戶的數據執行不當時抹去最終用戶的數據。如果可能的話,我希望只有在我發佈更新時才能更新最終用戶數據庫的架構,而不必觸摸數據本身。如果這是不可能的,那麼可以接受,我只需要確保在第一次部署之前將所有可以考慮的結構放入數據庫中。

總之我的問題有以下幾點:

  1. 如何分享VS,調試和發佈之間的單個SQL壓縮數據庫?

  2. 如何在應用程序部署和更新期間處理本地數據庫,可選擇更新數據庫模式而不擦除數據的能力?

+1

您也可以編程方式創建數據庫以完全控制。 – ErikEJ

+0

這可以工作。有沒有這樣的例子?如果可能的話,我想維護類的使用EF和數據源的綁定。 – CuddleBunny

回答

1

我有一個類似的應用程序,我保持數據庫文件完全分開。因爲您可能還需要執行不希望覆蓋用戶數據庫的更新。我有一個在EF連接發生之前檢查數據庫模式的進程。所以當我的用戶安裝這個應用程序時,它需要他們從我的網絡服務器上下載數據庫文件,並將它放在他們計算機上的特定位置。

+0

我想我可以將數據庫文件發送到AppData或其他東西。你能否詳細說明你提到的模式檢查過程? – CuddleBunny

+1

當應用程序啓動時,我檢查以確保文件存在。然後,我讓它檢查任何模式更改,例如,如果我添加一列到我的開發數據庫中的表,然後我只檢查該列,如果它不在那裏,我做一個sqlCE命令添加列,並在一些在嘗試使用EF連接之前,案例會更新列中的值。這可能看起來像啓動程序的開銷很大,但從長遠來看,更容易讓我的數據與我的客戶保持同步,並且仍然允許他們保留數據庫的個人部分不被覆蓋。 –

+0

好的,我並不太擔心EF不同步,因爲它應該包含在我發送的更新中。我還不清楚的是以下情況:SomeUser具有Schema1和Data1的SomeDatabase。然後,我將我的SomeDatabase副本更新爲Schema2。我必須做些什麼才能創建一個更新,將更新SomeUser的數據庫到Schema2,使Data1完整無缺(除非當然刪除了列)? – CuddleBunny