我在下面的代码中,看起来像是徒劳的,尝试为外键配置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);
});


在非空列SetNull上,它在哪里冒出GenderIdCascade可能是默认设置,已忽略了我的配置。

最佳答案

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


在您的project.json中,您引用了
已过时的Microsoft.EntityFrameworkCore.Commands
前,应将其删除。


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

关于entity-framework - 为什么我的EF Core迁移会忽略模型的OnDelete设置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39818239/

10-09 05:11