我將 SQLite 與 EFCore 一起使用。我正在嘗試保存屬于同一類別的多個專案,但是當我嘗試保存它們時,我收到外鍵約束錯誤。
錯誤:“SQLite 錯誤 19:'外鍵約束失敗'。”
模型如下所示:
public class Item
{
public int ItemId { get; set; }
public string ItemName {get; set; }
[ForeignKey("CategoryId")]
public int CategoryId { get; set; }
}
public class Category
{
public int CategoryId { get; set; }
public string CategoryName { get; set; }
public List<Item>? Items { get; set; }
}
因此,一個類別可以有很多專案,其中許多專案都具有與外鍵相同的類別 ID。SQLite 可以做到這一點嗎?
uj5u.com熱心網友回復:
您的模型配置不正確。請檢查以下文章并按照說明配置您的模型。
public class Item
{
public int Id { get; set; }
public string Name {get; set; }
public int CategoryId { get; set; }
[ForeignKey("CategoryId")]
public int Category { get; set; }
}
public class Category
{
public int Id { get; set; }
public string CategoryName { get; set; }
public List<Item> Items { get; set; }
}
uj5u.com熱心網友回復:
問題可能出在[ForeignKey]屬性中。像這樣的模型應該按照慣例配置自己(你有List<Item>on Category,這足以讓 EF Core 知道你的意思)。
我從來沒有使用ForeignKeyAttribute來配置我的模型,但檔案聽起來像是它指定了 OTHER 表中的屬性名稱,它應該用作參考該物體的外鍵。像這樣使用我希望 EF 只是將模型視為無效而拒絕,或創建某種自參考項。嘗試將其移至Category.Items. 或者干脆擺脫它。
為了比較,等效的流利配置將是:
public void Configure(EntityTypeBuilder<Category> builder)
{
builder
.HasMany(x => x.Items)
.WithOne(/* x => x.Category - this would apply if you had dual Category/CategoryId on Item */)
.HasForeignKey(x => x.CategoryId);
}
在這里,我們從類別表開始,指定另一個表并HasForeignKey說明它應該使用另一個表中的哪一列。
uj5u.com熱心網友回復:
試試如下:
public class Item
{
[Key]
public int ItemId { get; set; }
public string ItemName {get; set; }
public int CategoryId { get; set; }
[ForeignKey("CategoryId")]
public Category? Category { get; set; }
}
public class Category
{
[Key]
public int CategoryId { get; set; }
public string CategoryName { get; set; }
public List<Item>? Items { get; set; }
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/508232.html
