我在新数据库中有一个表,其中包含“注释”列。我有具有相同结构的相同表的旧数据库,但没有“注意”列。 我更改了 edmx,我从新数据库添加(映射)列“注释”。但是如果我想在旧数据库中使用 edmx 我有错误:列不存在...
我尝试将代码放入 try catch,但没有成功。错误在 try catch 之外。
//---new version DB
try
{
vehicles = entities.Vehicle.Where(v => v.NumPlate == numPlate || v.Note == numPlate);
}
catch (Exception)
{
vehicles = entities.Vehicle.Where(v => v.NumPlate == numPlate);
}
//---old version DB
foreach (Vehicle vehicle in vehicles) //<------- ERROR
我该如何解决? 谢谢
最佳答案
这是一种“技巧”,但您可以选择 ignore
Note
使用旧数据库后的属性。
寻找 OnModelCreating
context
中的方法类,并替换为:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
if (this.Database.Connection.Database == "Name_Of_Old_Database")
modelBuilder.Entity<Vehicle>().Ignore(x => x.Note);
}
更新:
由于您使用的是 .edmx
对于映射,目前没有办法在运行时修改映射,我认为我的建议确实是错误的。
我仍然不明白你想通过使用 try/catch
来实现什么 block ,是否包含(缺失)Note
并不重要字段是否在查询中,因为 Entity Framework
意识到模型不再与数据库兼容,它将完全拒绝使用该数据库。
但要记住两点:
因为您使用的是
IQueryable
, 你的try/catch
确实在错误的地方,只有在Materialization
期间才会抛出异常(当尝试实际检索数据时)。您可以使用
ToList
实现查询方法(以及其他):entities.Vehicle.Where(v => v.NumPlate == numPlate || v.Note == numPlate).ToList()
;或移动
try/catch
block 包裹foreach
声明。您可以使用
System.Data.Entity.Database.CompatibleWithModel()
早期确定(例如,在上下文初始化时)您的模型和数据库是否仍然可以协同工作的方法。
关于c# - 不在旧数据库中的 Entity Framework 映射列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16518280/