c# - 不在旧数据库中的 Entity Framework 映射列

标签 c# sql entity-framework mapping

我在新数据库中有一个表,其中包含“注释”列。我有具有相同结构的相同表的旧数据库,但没有“注意”列。 我更改了 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/

相关文章:

c# - "The specified type member ' 日期 ' is not supported in LINQ "

c# - 使用文本框和自定义词典进行拼写会减慢我在 C# WPF 中的应用程序

c# - 我如何在 XUnit 测试中的事实开始和结束时创建和删除数据库?

c# - 为单元测试模拟对象的实例化

c# - 我究竟如何使用 reactiveui 显示 View ?

mysql - 如何修复 'Selecting rows without null or blank value in each column'?

sql - 没有 CTE 的 Postgres/PADB 中的递归自查询

mysql - 如何在已排序结果的编号分页中查找某些内容从哪一页开始?

c# - LINQ to Entities 自定义方法

c# - 'System.Data.Entity.Internal.AppConfig' 的类型初始值设定项在子网站上抛出异常