我在下面的代码中,看起来像是徒劳的,尝试为外键配置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
上,它在哪里冒出GenderId
? Cascade
可能是默认设置,已忽略了我的配置。 最佳答案
按照@bricelam的建议,我提交了一个问题,并在不到24小时内得到了正确的答复。微软的Smit Patel建议:
在您的project.json
中,您引用了
已过时的Microsoft.EntityFrameworkCore.Commands
前,应将其删除。
我删除了它,重新生成的迁移现在对于两个FK都具有正确的onDelete
值。
关于entity-framework - 为什么我的EF Core迁移会忽略模型的OnDelete设置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39818239/