@@ -28,12 +28,12 @@ EF Core 实现多种不同的删除行为,并允许配置各个关系的删除
28
28
> [ !NOTE]
29
29
> 仅当使用 EF Core 删除主体且将依赖实体加载到内存中(即对于跟踪的依赖项)时才应用 EF Core 模型中配置的删除行为。 需要在数据库中设置相应的级联行为以确保未由上下文跟踪的数据已应用必要的操作。 如果使用 EF Core 创建数据库,将为你设置此级联行为。
30
30
31
- 对于上面的第二个操作 ,如果外键不可以为 null,则将某个外键值设置为 null 无效 。 (不可为 null 的外键相当于必选关系 。)在这些情况下,EF Core 会跟踪到外键属性已标记为 null,直到调用 SaveChanges,由于无法将更改永久保存到数据库,因此会在此时引发异常 。 这类似于从数据库中获取约束冲突。
31
+ 对于上述第二个操作 ,如果外键不可以为 null,则将外键值设置为 null 是无效的 。 (不可为 null 的外键相当于必需关系 。)在这些情况下,EF Core 会跟踪外键属性是否已被标记为 null,直到调用 SaveChanges,此时会引发异常,因为无法将更改永久保存到数据库中 。 这类似于从数据库中获取约束冲突。
32
32
33
33
有四个删除行为,如下表中列出。
34
34
35
35
### <a name =" optional-relationships " ></a >可选关系
36
- 对于可选关系(可以为 null 的外键),_ 可以_保存 null 外键值,从而产生以下影响:
36
+ 对于可选关系(可以为 null 的外键),可以保存 null 外键值,从而产生以下影响:
37
37
38
38
| 行为名称 | 对内存中的依赖项/子项的影响 | 对数据库中的依赖项/子项的影响 |
39
39
| :----------------------------| :---------------------------------------| :---------------------------------------|
@@ -59,7 +59,7 @@ EF Core 实现多种不同的删除行为,并允许配置各个关系的删除
59
59
* 在没有父项时不能存在的实体通常使用必选关系,其中“Cascade”是默认值。
60
60
* 如果实体可能有或可能没有父项,且希望 EF 负责为你将外键变为 null,则使用“ClientSetNull”
61
61
* 在没有父项时可以存在的实体通常使用可选关系,其中“ClientSetNull”是默认值。
62
- * 如果希望数据库即使在未加载子实体时也尝试将 null 值传播到子外键,则使用“SetNull”。 但是,请注意,数据库必须支持该值,配置此类数据库可能会导致其他限制,这实际上通常使得此选项不切实际。 这是“ SetNull” 不是默认值的原因。
62
+ * 如果希望数据库即使在未加载子实体时也尝试将 null 值传播到子外键,则使用“SetNull”。 但是,请注意,数据库必须支持此操作,并且如此配置数据库可能会导致其他限制,实际上这通常会使此选项不适用。 这就是 * SetNull* 不是默认值的原因。
63
63
* 如果不希望 EF Core 始终自动删除实体或自动将外键变为 null,则使用“Restrict”。 请注意,这要求使用代码手动同步子实体及其外键值,否则将引发约束异常。
64
64
65
65
> [ !NOTE]
@@ -177,7 +177,7 @@ EF Core 实现多种不同的删除行为,并允许配置各个关系的删除
177
177
178
178
* 博客标记为已删除
179
179
* 文章最初保持不变,因为在调用 SaveChanges 之前不会发生级联
180
- * 由于“ Restrict”指示 EF 不要自动将外键设置为 null,因此它保留非 null,SaveChanges 引发异常且不保存
180
+ * 由于* Restrict* 指告知 EF 不要自动将外键设置为 null,因此它保持为非 null,而 SaveChanges 将引发异常但不进行保存
181
181
182
182
## <a name =" delete-orphans-examples " ></a >删除孤立项示例
183
183
@@ -285,7 +285,7 @@ EF Core 实现多种不同的删除行为,并允许配置各个关系的删除
285
285
286
286
* 文章标记为已修改,因为断开关系导致外键标记为 null
287
287
* 如果外键不可以为 null,则即使实际值标记为 null 也不会更改
288
- * 由于“ Restrict”指示 EF 不要自动将外键设置为 null,因此它保留非 null,SaveChanges 引发异常且不保存
288
+ * 由于* Restrict* 指告知 EF 不要自动将外键设置为 null,因此它保持为非 null,而 SaveChanges 将引发异常但不进行保存
289
289
290
290
## <a name =" cascading-to-untracked-entities " ></a >级联到未跟踪的实体
291
291
0 commit comments