2016-03-10 69 views
0

我試圖創建與代碼優先EF6.1項目之前訪問數據庫。所有工作正常我已經啓用遷移,創建和更新數據庫的作品了。現在我的問題: 我已經創建了一個表「VersionHistory」和一個CompanyInfo表。EF6代碼優先:更新數據庫

我寫的「升級WIZZARD」爲更新數據庫。在開始數據庫更新之前,是否可以從這些表中獲取數據以顯示信息(例如YourCompanyName和從程序版本1.x更新爲1.y)?

我應該使用經典的SQLConnection這個?

非常感謝

+0

爲什麼不把這個信息來配置文件? –

+0

它是一個多用戶環境,一個用戶/管理員有權升級數據庫並推出新的程序文件。 – FaceOfIngo

+0

爲什麼不使用EF?如果你想保留它的DbSets - 使用存儲過程或視圖。 –

回答

0

您可以使用SQL連接(也可以是同英法),或者你可以禁用EF數據庫結構檢查。

System.Data.Entity.Database.SetInitializer<MyModel>(null); 

編輯

如果您訪問未更新的數據庫上的實體,您可以從EF接收阿土異常(即缺少列,缺少表等)。

+0

這個我已經在我的AppContext中用ctor試過了,之後使用了與之前相同的異常: – FaceOfIngo

+0

這個我已經在我的AppContext中用ctor試過了,之前用過相同的異常: in ctor <! - language: c# - > System.Data.Entity.Database.SetInitializer (null); 使用(VAR CTX =新AppContext()){ \t變種版本= ctx.Versions.LastOrDefault() - >異常 } 例外: 無效的列名稱服務器名'。 無效的列名稱'ConnectionType'。 列名稱'IntegratedSecurity'無效。 – FaceOfIngo

+0

這個例外似乎與模型沒有關係。它似乎與表中的一些缺失的列有關。如果您沒有檢查模型並且模型不是最新的,那麼當您訪問未更新的模型部分時可能會出現此異常。我也更新了答案。 – bubi

0

在符合「布比」我將使用基於我的上下文例如將SQLConnection

using (var ctx = new AppContext()) { 
ctx.Database.Connection.Open(); 

var cmd = ctx.Database.Connection.CreateCommand(); 
cmd.CommandText = "Select * From CompanyInfo"; 

var rdr = cmd.ExecuteReader(); 
var infos = (from row in rdr.Cast<System.Data.Common.DbDataRecord>() 

      let entityId = (int)row["EntityId"] //internal key 
      let entityKey = (string)row["EntityKey"] //visible key 
      let displayname = (string)row["DisplayName"] //company name 

      // some more stuff (version, etc.) 

      select new NOCompanyInfo { 
       EntityId = entityId, 
       EntityKey = entityKey, 
       DisplayName = displayname, 
       DBName = dbName, 
       ... 
      }).ToList(); 

return new ObservableCollection<NOCompanyInfo>(infos); 

}

感謝

相關問題