我試圖創建與代碼優先EF6.1項目之前訪問數據庫。所有工作正常我已經啓用遷移,創建和更新數據庫的作品了。現在我的問題: 我已經創建了一個表「VersionHistory」和一個CompanyInfo表。EF6代碼優先:更新數據庫
我寫的「升級WIZZARD」爲更新數據庫。在開始數據庫更新之前,是否可以從這些表中獲取數據以顯示信息(例如YourCompanyName和從程序版本1.x更新爲1.y)?
我應該使用經典的SQLConnection這個?
非常感謝
我試圖創建與代碼優先EF6.1項目之前訪問數據庫。所有工作正常我已經啓用遷移,創建和更新數據庫的作品了。現在我的問題: 我已經創建了一個表「VersionHistory」和一個CompanyInfo表。EF6代碼優先:更新數據庫
我寫的「升級WIZZARD」爲更新數據庫。在開始數據庫更新之前,是否可以從這些表中獲取數據以顯示信息(例如YourCompanyName和從程序版本1.x更新爲1.y)?
我應該使用經典的SQLConnection這個?
非常感謝
您可以使用SQL連接(也可以是同英法),或者你可以禁用EF數據庫結構檢查。
System.Data.Entity.Database.SetInitializer<MyModel>(null);
編輯
如果您訪問未更新的數據庫上的實體,您可以從EF接收阿土異常(即缺少列,缺少表等)。
這個我已經在我的AppContext中用ctor試過了,之後使用了與之前相同的異常: – FaceOfIngo
這個我已經在我的AppContext中用ctor試過了,之前用過相同的異常: in ctor <! - language: c# - > System.Data.Entity.Database.SetInitializer
這個例外似乎與模型沒有關係。它似乎與表中的一些缺失的列有關。如果您沒有檢查模型並且模型不是最新的,那麼當您訪問未更新的模型部分時可能會出現此異常。我也更新了答案。 – bubi
在符合「布比」我將使用基於我的上下文例如將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);
}
感謝
爲什麼不把這個信息來配置文件? –
它是一個多用戶環境,一個用戶/管理員有權升級數據庫並推出新的程序文件。 – FaceOfIngo
爲什麼不使用EF?如果你想保留它的DbSets - 使用存儲過程或視圖。 –