我试图创建与代码优先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 - 使用存储过程或视图。 –