我的系统中存在一个问题,其中某个进程试图替换记录,这会导致FK异常并失败。我们在.Net Standard 2.0库中使用Microsoft.EntityFrameworkCore 2.2.2。大部分代码是从非.Net Core的现有项目移植的。
我正在尝试将层叠删除添加到以下模型:
modelBuilder.Entity<TermEntity>()
.ToTable("Term", SchemaName)
.HasKey(k => new { k.TermId, k.TenantId });
添加以下内容:
modelBuilder.Entity<TermEntity>()
.ToTable("Term", SchemaName)
.HasKey(k => new { k.TermId, k.TenantId });
.OnDelete(DeleteBehavior.Cascade);
但是我得到一个错误C1061'KeyBuilder'不包含OnDelete的定义,这是有意义的,因为那是从HasKey返回的,并且OnDelete在ReferenceCollectionBuilder上。上面使用的任何方法都不会返回这些方法之一,并且所有方法(是的,我已经尝试过将其移动)都给出类似的错误。该方法的签名如下:
protected override void OnModelCreating(ModelBuilder modelBuilder)
当我查看一些EF Core教程时,我看不到所使用的方法,而是看到链末尾通常带有OnDelete的HasOne,WithMany等。我还以为我读到Cascade是默认的,所以不确定是为什么我首先遇到了这个问题。
有人可以指出正确的方向来解决此问题。
TermEntity如下:
public class TermEntity
{
/// <summary>
/// Gets or sets the term identifier.
/// </summary>
/// <value>
/// The term identifier.
/// </value>
public short TermId { get; set; }
/// <summary>
/// Gets or sets the Tenant identifier.
/// </summary>
/// <value>
/// The Tenant range identifier.
/// </value>
public short TenantId { get; set; }
/// <summary>
/// Gets or sets the value.
/// </summary>
/// <value>
/// The value.
/// </value>
public int Value { get; set; }
}
注意:我被要求提供示例中使用的课程,并意识到我张贴了错误的课程。 TermEntity是我遇到问题的类。