【发布时间】:2021-11-14 22:07:03
【问题描述】:
我有2个模型如下。
盒子
案卷详情
一个 DocketDetail 最多可以有 3 个与之关联的框(第一个是必需的,后两个是可选的)。 DocketDetail 模型的这种关系定义如下。
[ForeignKey("Box1Id")]
public Box Box1 { get; set; }
public Guid Box1Id { get; set;}
[ForeignKey("Box2Id")]
public Box Box2 { get; set; }
public Guid? Box2Id { get; set;}
[ForeignKey("Box3Id")]
public Box Box3 { get; set; }
public Guid? Box3Id { get; set;}
我还有以下 Fluent API 脚本来将关系设置为可选
modelBuilder.Entity<DocketDetail>()
.HasOne(dd => dd.Box1)
.WithMany()
.OnDelete(DeleteBehavior.Restrict);
modelBuilder.Entity<DocketDetail>()
.HasOne(dd => dd.Box2)
.WithMany()
.HasForeignKey(dd => dd.Box2Id)
.IsRequired(false)
.OnDelete(DeleteBehavior.NoAction);
modelBuilder.Entity<DocketDetail>()
.HasOne(dd => dd.Box3)
.WithMany()
.HasForeignKey(dd => dd.Box3Id)
.IsRequired(false)
.OnDelete(DeleteBehavior.NoAction);
但是,EF 迁移会强制生成外键。为了使这些关系成为可选,我缺少什么?
migrationBuilder.AddForeignKey(
name: "FK_DocketDetail_Box_Box1Id",
table: "DocketDetail",
column: "Box1Id",
principalTable: "Box",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
migrationBuilder.AddForeignKey(
name: "FK_DocketDetail_Box_Box2Id",
table: "DocketDetail",
column: "Box2Id",
principalTable: "Box",
principalColumn: "Id");
migrationBuilder.AddForeignKey(
name: "FK_DocketDetail_Box_Box3Id",
table: "DocketDetail",
column: "Box3Id",
principalTable: "Box",
principalColumn: "Id");
【问题讨论】:
-
使用 .HasOptional,我认为您的查询已在此处得到解答:stackoverflow.com/questions/8019999/…
-
谢谢,但 HasOptional 不再存在于 EF Core stackoverflow.com/questions/35562483/… 通过将属性设置为 Nullable 它应该根据该帖子使其成为可选,但由于我的 ID 值是 Guid,所以这些不能null,这可能是我的问题?
标签: entity-framework-core key optional