5

我有一个 POCO 类,它映射到这样定义的自联接表:

CREATE TABLE [dbo].[GalleryCategories](
    [CategoryID] [int] IDENTITY(0,1) NOT NULL PRIMARY KEY CLUSTERED,
    [Name] [nvarchar](256) NOT NULL,
    [ParentID] [int] NULL REFERENCES [dbo].[GalleryCategories] ([CategoryID]) ON DELETE NO ACTION ON UPDATE NO ACTION, 
)

我知道有一种方法可以使用模型构建器来定义关系,以从孩子中引用父母......(例如这样

但是我试图映射的类看起来像这样......

public class GalleryCategory
{
    [Key]
    public int CategoryID { get; set; }
    public string Name { get; set; }
    public int? ParentID { get; set; }
    public List<Category> Subcategories { get; set; }
}

换句话说,我试图让子类别填充所有的孩子 - 即遍历层次结构,而不是向上的层次结构。

有没有办法使用 EF 做到这一点?这一定是某个地方的常见问题解答,但在谷歌搜索一个小时后我找不到它:-)

4

1 回答 1

12

那应该是您班级中的列表子类别吗?如果是这样,并且它是一个自引用表,您可以通过以下任一方式创建映射数据注释:

 public class GalleryCategory
    {
        [Key]
        public int CategoryID { get; set; }
        public string Name { get; set; }
        public int? ParentID { get; set; }
        [ForeignKey("ParentID")]
        public virtual List<GalleryCategory> Subcategories { get; set; }
    }

或者像这样流利:

 public class Model : DbContext
    {
        public DbSet<GalleryCategory> Categories { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<GalleryCategory>()
               .HasMany(x => x.Subcategories)
                .WithOptional()
                .HasForeignKey(g => g.ParentID);
        }
    }
于 2012-08-15T20:32:51.797 回答