我有一个 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,
)
我知道有一种方法可以使用模型构建器来定义关系,以从子级引用父级......(例如像这样 https://stackoverflow.com/questions/5146013/entity-framework-ctp5-code-first-mapping-foreign-key-in-same-table)
但我试图映射的类看起来像这样......
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 来做到这一点吗?这一定是某个地方的常见问题解答,但我在谷歌搜索一个小时后找不到它:-)
这应该是您班级中的一个子类别列表吗?如果是这样,并且它是一个自引用表,您可以通过数据注释的任一方式创建映射,如下所示:
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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)