EF Core OnDelete不可用

时间:2019-08-29 10:10:11

标签: c# .net-core entity-framework-core

我的系统中存在一个问题,其中某个进程试图替换记录,这会导致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是我遇到问题的类。

0 个答案:

没有答案