在像这样的子实体上设置外键时:
modelBuilder.Entity<Child>()
.HasOne(c => c.Parent)
.WithMany(p => p.Children)
.HasForeignKey(c => c.ParentId)
.OnDelete(DeleteBehavior.Cascade);
我能够配置约束的“ ON DELETE”行为。最终的迁移看起来像:
migrationBuilder.CreateTable(
name: "Child",
columns: table => new
{
Id = table.Column<Guid>(nullable: false),
ParentId = table.Column<Guid>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Child", x => x.Id);
table.ForeignKey(
name: "FK_Child_Parent_ParentId",
column: x => x.ParentId,
principalTable: "Parent",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
在生成的迁移中,我将能够直接编辑onUpdate行为,如方法签名所示:
public virtual OperationBuilder<AddForeignKeyOperation> ForeignKey(
[NotNull] string name,
[NotNull] Expression<Func<TColumns, object>> column,
[NotNull] string principalTable,
[NotNull] string principalColumn,
[CanBeNull] string principalSchema = null,
ReferentialAction onUpdate = ReferentialAction.NoAction,
ReferentialAction onDelete = ReferentialAction.NoAction);
但是我找不到通过流畅的API或带有属性的方法。
是否可以为外键配置EF核心“ ON UPDATE”行为?
答案 0 :(得分:2)
今天无法使用Fluent API。
我们(EF团队)基于SQL规范设计了MigrationBuilder API。这使您可以手动执行许多在当今EF Core中完全没有意义的事情。但是,随着时间的流逝,这可能会改变。例如,从3.0开始,实体类型可以映射到没有主键的表,而Migrations将创建它们。从1.0开始,您就可以手动创建没有主键的表。
启用可变键(问题#4073)后,很可能会引入Fluent API,以便您配置ON UPDATE行为。