c# - 是否可以为外键配置 EF 核心“ON UPDATE”行为?
问题描述
在这样的子实体上设置外键时:
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 Core“ON UPDATE”行为?
解决方案
今天的 Fluent API 是不可能的。
我们(EF 团队)基于 SQL 规范设计了 MigrationBuilder API。这使您可以手动执行许多在当今 EF Core 中不完全有意义的事情。但这可能会随着时间而改变。例如,从 3.0 开始,实体类型可以映射到没有主键的表,迁移将创建它们。自 1.0 以来,您已经能够手动创建没有主键的表。
启用可变键时(问题#4073)可能会引入 Fluent API 来让您配置 ON UPDATE 行为。
推荐阅读
- c++ - 为什么 mt19937 的 STD 实现具有双倍 sizeof 作为 boost 版本?
- swift - 如何快速存储 NSGradient(colorsAndLocations:) 的元组
- javascript - 可以使用 JSFuck 约定调用具有 2 个或更多参数的函数吗?
- node.js - express.js 从命令行运行端点
- azure - Zip 部署失败,出现“未处理的异常。System.IO.IOException:超出磁盘配额”
- javascript - 如何使用 Yup 从类型推断模式?
- javascript - 在reactJS中单击按钮添加新用户
- azure - CloudBlob 上的 OpenReadAsync 返回空流
- android - ViewModel 在屏幕旋转时不保留数据
- python - 在 IDLE 中写长指令