EF Core 3.1 数据库第一次删除关系错误

EF Core 3.1 database first removed relation error

有一个 table (tblCalculation),它有两个相关的 tables(tblAddon 和 tblVehicle),外键 AddonId 和 VehicleId。在我的 c# 核心 3.1 应用程序中构建了上下文和模型。然后我不得不更改 table 的关系并删除与 tblVehicle table 的关系,因此我删除了 SSMS 中的关系并删除了外键 VehicleId。在我的代码中做了同样的事情并删除了计算模型上的 属性 VehicleId 并从 OnModelCreating 设置中删除了 HasOne(..).WithMany(...) 定义。

但是当尝试加载 table(在此过程中一直为空)时,我得到无效的列名 'VehicleId'。在 SSMS 中加载(仍为空"table 工作正常,但此代码生成错误:

var calculations = await _context.Calculation.ToListAsync();

ef 中是否有我遗漏的参考资料或问题是什么?

编辑: 运行 又是一个 Scaffold-DbContext,找不到任何对 VehicleId 的引用

public partial class Calculation
{
    public int Id { get; set; }
    public int? AddonId { get; set; }
    public byte Period { get; set; }
    public short Mileage { get; set; }
    public decimal? ResidualValue { get; set; }
    public decimal? MonthlyCost { get; set; }
    public DateTime Created { get; set; }
    public string CreatedBy { get; set; }
    public DateTime? Updated { get; set; }
    public string UpdatedBy { get; set; }

    public virtual Addon Addon { get; set; }
}

modelBuilder.Entity<Calculation>(entity =>
        {
            entity.Property(e => e.Created)
                .HasColumnType("datetime")
                .HasDefaultValueSql("(getdate())");

            entity.Property(e => e.CreatedBy).HasMaxLength(50);

            entity.Property(e => e.MonthlyCost).HasColumnType("money");

            entity.Property(e => e.ResidualValue).HasColumnType("money");

            entity.Property(e => e.Updated).HasColumnType("datetime");

            entity.Property(e => e.UpdatedBy).HasMaxLength(50);

            entity.HasOne(d => d.Addon)
                .WithMany(p => p.Calculation)
                .HasForeignKey(d => d.AddonId)
                .HasConstraintName("FK_tblCalculation_tblAddon");
        });

用临时模型替换当前上下文的模型会产生同样的问题,但 运行在临时上下文中使用相同的模型是可行的。因此,上下文中的某些内容保留了对 VehicleId 的引用,但找不到它。因此将生成一个完全独立的上下文(因为在原始上下文中还有其他 table)和 运行。

最简单的解决方案是再次搭建数据库。这应该为您提供一个工作环境,您可以使用它来完全替代您拥有的环境。如果您在现有上下文中自定义了模型,则需要复制更改。使用像 BeyondCompare 这样的工具可以使这变得更容易;将您的数据库搭建到一个新的、与现有上下文所在文件夹不同的文件夹中,然后(这些是 BeyondCompare 特定说明)在 windows 资源管理器中右键单击新文件夹并选择“select 左文件夹比较”,然后转到现有上下文所在的文件夹并右键单击,选择“与其他文件夹比较”。出现并排 window 对,按 Ctrl A 并从其中一个菜单中选择“比较内容”(我忘了是哪个,可能是“会话”或“操作”)。 BC 将比较所有文件并以红色显示与 DM 的任何显着差异。双击一个红色文件以查看并排差异并使用箭头从旧文件复制到新文件,或者使用它来查找旧上下文中仍然提到 VehicleId 的任何挥之不去的文件(它可能在相关的相关文件中,除了你在问题中关注的那些)

将一个或另一个作为主要上下文后,请删除另一个上下文。