簡體   English   中英

EF Core 3.1 數據庫首次刪除關系錯誤

[英]EF Core 3.1 database first removed relation error

有一個表(tblCalculation),它有兩個相關的表(tblAddon 和 tblVehicle),外鍵 AddonId 和 VehicleId。 在我的 c# 核心 3.1 應用程序中搭建了上下文和模型。 然后我不得不更改該表的關系並刪除與 tblVehicle 表的關系,因此我刪除了 SSMS 中的關系並刪除了外鍵 VehicleId。 在我的代碼中做了同樣的事情並刪除了計算 model 上的屬性 VehicleId 並從 OnModelCreating 設置中刪除了 HasOne(..).WithMany(...) 定義。

但是當嘗試加載表(通過此過程已為空)時,我得到無效的列名“VehicleId”。 在 SSMS 中加載(仍然為空)表可以正常工作,但此代碼會生成錯誤:

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 的引用,但找不到它。 因此將生成一個完全獨立的上下文(因為原始上下文中有其他表)並從中運行。

最簡單的解決方案是再次搭建數據庫。 這應該為您提供一個工作環境,您可以將其用作您擁有的環境的完全替代品。 如果您在現有上下文中自定義了模型,則需要將更改復制過來。 使用 BeyondCompare 之類的工具可以使這變得更容易; 將您的數據庫搭建到與現有上下文所在的文件夾不同的新文件夾中,然后(這些是 BeyondCompare 特定說明)在 windows 資源管理器中右鍵單擊新文件夾並選擇“選擇左側文件夾進行比較”,然后將 go 到現有上下文所在的文件夾,然后右鍵單擊,選擇“與其他文件夾比較”。 出現並排的 window 對,按 Ctrl A 並從其中一個菜單中選擇比較內容(我忘了哪個,可能是 Session 或操作)。 BC 將比較所有文件並將任何與 DM 顯着差異的文件顯示為紅色。 雙擊紅色文件以查看並排差異並使用箭頭從舊文件復制到新文件,或使用它來查找舊上下文中仍然提到 VehicleId 的任何揮之不去的文件(它可能在相關的相關文件中,除了你在問題中關注的那些)

將一個上下文或另一個作為主要上下文后,刪除另一個上下文。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM