EF Core 在 OnModelCreating 时创建影子 FK 索引并导致 运行 时间错误

EF Core creates a Shadow FK Index while OnModelCreating and Its causing run time error

我正在从 Entity Framework 迁移到 Ef Core 并 运行 进入这个问题,其中 EF Core 正在创建影子 FK 索引 属性 并在末尾添加 1 作为相同 -名为 属性 的名称已存在于我的 class.

>  TabCode (decimal) Required Index
>         Annotations: 
>           Relational:ColumnType: decimal(10, 0)
>       TabCode1 (no field, Nullable<decimal>) Shadow FK Index



>  Foreign keys: 
>           PaymentBatch {'ParentPaymentBatchId'} -> PaymentBatch {'PaymentBatchId'} ToDependent: PaymentBatch1 ToPrincipal:
> PaymentBatch2 ClientSetNull
>             Annotations: 
>               Relational:Name: FK_PaymentBatch_PaymentBatch
>           PaymentBatch {'TabCode1'} -> Tab {'TabCode'} ToPrincipal: Tab ClientSetNull
>         Indexes: 
>           ParentPaymentBatchId 
>           TabCode1

以上代码来自modelBuilder ToDebugString() 结果对象。 我一直收到错误消息,提示 TabCode1 列不存在。 当我尝试 运行 页面时。 TabCode 是与索引之一同名的 属性。 我检查了数据库,我们定义了一个非聚集索引,我也在 OnModelCreating 中定义了它。我不确定这个 Shadow FK Index 是什么,以及如何在我的 modelBuilder.

中定义它

下面是我在 modelBuilder 中定义索引的方式

entity.HasIndex(e => new { e.PaymentBatchId, e.TabCode, e.TentType, e.TaxYear }, "TRX_PaymentCodeTentTypeTaxYear")
                .IsUnique();
entity.HasOne<Tab>(d => d.Tab)
                    .WithMany(p => p.PaymentBatch)
                    .HasForeignKey(d => d.TabCode);

以上代码解决了我的问题。事实证明,EF 核心需要定义 SQL 中不存在的任何关系,而我们在 EF 中添加了导航 属性。