我有一個Personnage應該擁有多個Histoires并且應該有一個的類Default Histoire。
以下是課程:
public class Personnage
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Nom { get; set; }
public int? DefaultHistoireId { get; set; }
public virtual Histoire? DefaultHistoire { get; set; }
public List<Histoire> Histoires { get; set; } = new List<Histoire>();
}
public class Histoire
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Nom { get; set; }
public DateTime DateDebut { get; set; }
public DateTime? DateFin { get; set; } = null;
public List<Dialogue> Dialogues { get; set; } = new List<Dialogue>();
public int PersonnageId { get; set; }
public virtual Personnage Personnage { get; set; }
public int? DefaultForPersonnageId { get; set; } = null;
public virtual Personnage? DefaultForPersonnage { get; set; } = null;
}
Personnage.DefaultHistoire我必須先創建 Personnage,所以和之間的關系Histoire應該是可選的。
我試圖將屬性設定為Personnage.DefaultHistoire可Personnage.DefaultHistoireId為空的“?” 在我的代碼中,并將其添加到我的DbContext.OnModelCreating:
modelBuilder
.Entity<Personnage>()
.HasOne(x => x.DefaultHistoire)
.WithOne(x => x.DefaultForPersonnage)
.IsRequired(false)
.HasForeignKey<Histoire>(x => x.DefaultForPersonnageId)
.HasPrincipalKey<Personnage>(x => x.DefaultHistoireId)
.OnDelete(DeleteBehavior.Cascade);
但是在 Migration 生成的代碼中,它仍然使屬性為nullable: false:
migrationBuilder.CreateTable(
name: "Personnages",
schema: "dbo",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Nom = table.Column<string>(type: "text", nullable: false),
DefaultHistoireId = table.Column<int>(type: "integer", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Personnages", x => x.Id);
table.UniqueConstraint("AK_Personnages_DefaultHistoireId", x => x.DefaultHistoireId);
});
如何將此關系標記為可選?
uj5u.com熱心網友回復:
.HasPrincipalKey<Personnage>(x => x.DefaultHistoireId);, 然后Personnage.DefaultHistoireId將充當主鍵、唯一值且不可為空。
也許Histoire.DefaultForPersonnageId并且Histoire.DefaultForPersonnage可以直接洗掉和Personnage.DefaultHistoireId參考Histoire.Id:
modelBuilder
.Entity<Personnage>()
.HasOne(x => x.DefaultHistoire)
.WithOne()
.HasForeignKey<Personnage>(x => x.DefaultHistoireId)
.OnDelete(DeleteBehavior.Cascade);
public class Histoire
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Nom { get; set; }
public DateTime DateDebut { get; set; }
public DateTime? DateFin { get; set; } = null;
public List<Dialogue> Dialogues { get; set; } = new List<Dialogue>();
public int PersonnageId { get; set; }
public virtual Personnage Personnage { get; set; }
//public int? DefaultForPersonnageId { get; set; } = null;
//public virtual Personnage? DefaultForPersonnage { get; set; } = null;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/515585.html
上一篇:將串列添加到物體框架中的物件
