0

使用MigrateDatabaseToLatestVersion。存儲在SQL Server Express中的數據庫已更新。使用SQL Server CE數據庫文件代碼優先遷移

使用有效的路徑和文件名打開本地存儲的.sdf文件(SQL Server CE數據庫)時,不會更新此文件。

Database.SetInitializer(new MigrateDatabaseToLatestVersion<DTDataContext, Configuration>()); 
var connection = DTDataContext.GetConnectionSqlServerCE40(fullPathName); 

dataBaseContext = new DTDataContext(connection, true); 
dataBaseContext.Database.Initialize(true); 

MigrationHistory條目將在SQL Server Express中創建,而不是在本地SQL Server CE數據庫文件中創建。

什麼是更新本地SQL Server CE數據庫文件的最簡單方法?

回答

0

經過幾次實驗,發現了一個合適的解決方案(這符合我的目的)。

這個問題的焦點是舊的sdf(s),它是以前編寫的,但與代碼相比較老的模型。 我決定不遷移舊文件(作爲一種備份應用)。 在這些文件中只能讀取。顯然,新的sdf(s)將來可能會被讀取一次,但這沒什麼大不了的。 在閱讀可能不存在的實體的東西之前(在sdf中),將通過SqlQuerycount(*)進行檢查。

 [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] 
     private bool TestIfTableExists(string tableName, DTDataContext dataContext) 
     { 
      try 
      { 
       int cnt = dataContext.Database.SqlQuery<int>("select count(*) from " + tableName).First(); 
       return cnt > 0; 
      } 
      catch(Exception ex) { /*available SqlCeException assembly does not fit --- table does not exist*/ return false; } 
     } 

順便說一句當使用SqlCeException(V3.5),它可以經由組件搜索基準來提供,上述的情況將失敗(=未處理的異常!)。還沒有用v4測試過,因爲我想避免使用'手動'引用,因爲它必須被檢入(不需要任何其他工作站的路徑問題)。

關於編寫sdf: 在用當前模型編寫新的sdf時,這根本不是問題。

Database.CreateIfNotExists()被應用。

在我的情況下,更新sdf是沒有必要的---並沒有找到一個快速的解決方案。

相關問題