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 中添加了导航 属性。
我正在从 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 中添加了导航 属性。