【问题标题】:Why does my EF Core migration ignore the model's OnDelete settings?为什么我的 EF Core 迁移会忽略模型的 OnDelete 设置?
【发布时间】:2016-10-02 14:54:39
【问题描述】:

我有以下代码,看起来是徒劳的,尝试为外键配置OnDelete 行为:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Contact>()
        .HasOne(e => e.Gender)
        .WithMany()
        .HasForeignKey(e => e.GenderId)
        .OnDelete(DeleteBehavior.Restrict);

    modelBuilder.Entity<Contact>()
        .HasOne(e => e.Title)
        .WithMany()
        .HasForeignKey(e => e.TitleId)
        .OnDelete(DeleteBehavior.Restrict);
}

然而,当我生成第一个迁移时,它会创建这个表和另外两个表,它会为 Contact 创建约束,如下所示:

constraints: table =>
{
    table.PrimaryKey("PK_Contact", x => x.Id);
    table.ForeignKey(
        name: "FK_Contact_Gender_GenderId",
        column: x => x.GenderId,
        principalTable: "Gender",
        principalColumn: "Id",
        onDelete: ReferentialAction.SetNull);
    table.ForeignKey(
        name: "FK_Contact_Title_TitleId",
        column: x => x.TitleId,
        principalTable: "Title",
        principalColumn: "Id",
        onDelete: ReferentialAction.Cascade);
});

在不可为空的列GenderId 上,它在哪里得到SetNullCascade 可能是默认值,忽略了我的配置。

【问题讨论】:

  • 看起来像一个错误。你能submit a new issue吗?
  • @IvanStoev 请告诉为什么它不适用于 EF Core?如果不是 EF Core,我使用的 Microsoft.EntityFrameworkCore.* 包是什么?
  • 您的问题呢,您可以考虑@bricelam 的建议,因为我无法使用 EF Core / Full .NET Framework 重现它。
  • 我已经提交了一个问题,魔鬼自己正在处理它:Ref No. #6668
  • @IvanStoev 是的,对不起,我刚回复后怀疑这无关。

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


【解决方案1】:

按照@bricelam 的建议,我提交了一个问题并在不到 24 小时内得到了正确的回复。微软的 Smit Patel 建议:

在您的project.json 中,您参考了 Microsoft.EntityFrameworkCore.Commands 被弃用了一段时间 以前,应该被删除。

我删除了它,重新生成的迁移现在具有两个 FK 的正确 onDelete 值。

【讨论】:

    猜你喜欢
    • 2022-10-20
    • 2016-04-28
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 2021-12-20
    相关资源
    最近更新 更多