Omr*_*itt 4 c# entity-framework entity-framework-4.3
我有一个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,
)
Run Code Online (Sandbox Code Playgroud)
我知道有一种方法可以使用模型构建器来定义关系,以引用来自子项的父项...(例如,像这样)
但我试图绘制的课程看起来像这样......
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; }
}
Run Code Online (Sandbox Code Playgroud)
换句话说,我正在尝试使用所有子项填充子类别 - 即遍历层次结构,而不是层次结构.
有没有办法用EF做到这一点?这必须是一个常见问题解答,但谷歌搜索一小时后我找不到它:-)
Mar*_*eta 10
这应该是您班级中的列表子类别吗?如果是这样,并且它是一个自引用表,您可以像这样创建数据注释的映射:
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; }
}
Run Code Online (Sandbox Code Playgroud)
或者像这样流利:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4619 次 |
| 最近记录: |