首先使用代码将实体导航属性映射到同一表
本文关键字:映射 属性 导航 实体 代码 | 更新日期: 2023-09-27 18:34:57
我有一个实体,其属性名为 ParentId 链接到名为 Parent 的导航属性。这种关系似乎工作正常,但我的问题是现在我想拥有另一个导航属性,该属性将是父项与实体 ID 相同的"子"项列表。
我已经在我的FK属性中尝试了"ID","父级",但是我收到"类型'jrSite.Core.SiteModel'上的属性'子项'上的外键属性无效"错误。
如何告知 EF 我希望该导航属性在 SiteModel 表中搜索具有匹配父 ID 的项目?
我的班级在下面
public class SiteModel
{
public SiteModel() { }
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public DateTime Created { get; set; }
[ForeignKey("Creator")]
public int CreatorID;
public SiteAccount Creator { get; set; }
[ForeignKey("Owner")]
public int OwnerID;
public SiteAccount Owner { get; set; }
[ForeignKey("Parent")]
public int? ParentID;
public SiteModel Parent { get; set; }
[ForeignKey("Parent")]
public List<SiteModel> Children { get; set; }
public SiteModel(SiteAccount creator, SiteAccount owner)
{
Creator = creator;
Owner = owner;
Created = DateTime.Now;
}
}
ParentID/Parent
nav 属性已经处理了这种关系 - 去掉 Children
属性声明上的 ForeignKey
属性。 我刚刚测试了以下内容,它可以工作:
public class HierarchicalEntity
{
public int Id { get; set; }
public string Description { get; set; }
public int? ParentId { get; set; }
public virtual HierarchicalEntity Parent { get; set; }
public virtual ICollection<HierarchicalEntity> Children { get; set; }
}
using (var db = new TestEntities())
{
var parent = new HierarchicalEntity();
db.HierarchicalEntity.Add(parent);
var children = new List<HierarchicalEntity>()
{
new HierarchicalEntity() { Parent = parent },
new HierarchicalEntity() { Parent = parent }
};
children.ForEach(c => db.HierarchicalEntity.Add(c));
db.SaveChanges();
}
在 DBContext 类中重写 OnModelCreate 并添加以下代码:
modelBuilder.Entity<SiteModel>()
.HasRequired<SiteAccount>(s => s.Creator);
modelBuilder.Entity<SiteModel>()
.HasRequired<SiteAccount>(s => s.Owner);