我有一個用于EntityFrameworkCore從資料庫訪問資料的專案。
我正在嘗試為單個物件(即Category)創建父/子關系。我的物件看起來像這樣
public class Category
{
public int Id { get; set;}
public string Name { get; set; }
public int? ParentCategoryId { get; set; }
public Category ParentCategory { get; set; }
public ICollection<Category> Children { get; set; }
}
該屬性ParentCategoryId是可選的,但設定后,它將確定當前類別的父級。同時,當Children包含關系時,我希望能夠提取ParentCategoryId與當前類別的 id 相等的所有類別。
我在背景關系中添加了以下代碼來定義關系
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<Category>(cat =>
{
cat.HasMany(x => x.Children).WithOne().HasForeignKey(x => x.ParentCategoryId);
cat.HasOne(x => x.ParentCategory).WithOne();
});
}
因此,當呼叫以下代碼時,我想獲取ParentCategory所有Children類別 ID 10。
var category = _context.Categories.Where(cat => cat.Id == 10)
.Include(x => x.ParentCategory)
.Include(x => x.Children)
.ToList();
但是,上面的代碼給了我以下錯誤
Invalid column name 'ParentCategoryId1'." string
我怎樣才能正確地定義為關系ParentCategory和Children?
uj5u.com熱心網友回復:
您必須為導航屬性使用更簡單的名稱,否則 EF 會混淆。此代碼已測驗并正常作業
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
public virtual Category Parent { get; set; }
public virtual ICollection<Category> Children { get; set; }
}
和 dbcontext
public virtual DbSet<Category> Categories { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Category>()
.HasOne(s => s.Parent)
.WithMany(m => m.Children)
.HasForeignKey(e => e.ParentId);
OnModelCreatingPartial(modelBuilder);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/337292.html
上一篇:我如何衡量點擊之間的時間?
