0

我有一个实体,其属性名为 ParentId,链接到名为 Parent 的导航属性。这种关系似乎工作正常,但我的问题是现在我想要另一个导航属性,它是一个“子”项目列表,其中父项与实体 ID 相同。

我在我的 FK 属性中尝试了“ID”、“Parent”,但我得到“类型'jrSite.Core.SiteModel' 上的属性'Children' 上的 ForeignKeyAttribute 无效”错误。

我如何告诉 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;
    }
}
4

2 回答 2

0

在 DBContext 类中覆盖 OnModelCreating 并添加以下代码:

modelBuilder.Entity<SiteModel>()
  .HasRequired<SiteAccount>(s => s.Creator);


modelBuilder.Entity<SiteModel>()
  .HasRequired<SiteAccount>(s => s.Owner);
于 2013-10-11T21:36:25.157 回答
0

nav 属性已经处理了这种ParentID/Parent关系——去掉属性声明ForeignKey中的属性。Children我刚刚测试了以下,它的工作原理:

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();
        }
于 2013-10-11T21:54:35.193 回答