1
我必须映射到这样定义自加入表POCO类:映射自加入一个集合中的代码第一个实体框架4.3
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,
)
我知道有一种方法来定义的关系使用模型构建器从孩子引用父...(如like this)
但我试图映射类看起来像这样...
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做到这一点?这肯定是一个常见问题,但我找不到它后Google搜索一小时:-)
感谢马克 - 值得注意的是,流利代码性格字符完全是我试过的代码,并且它很好地工作。 我最初尝试[ForeignKey()]属性,但它没有在4.3编译...似乎有一个[Association]属性,我认为我可以用来完成相同的事情,但我无法让它工作。你知道[ForeignKey]被重命名为什么吗? – 2012-08-15 22:52:11
还有一条评论...我可以让linq查询很好地工作 - 例如GalleryCategories.Include(“Subcategories.Activities”)。Include(“Activities”)。其中(c => c.ParentID == null)。但是,当我尝试添加一个具有子类别的新GalleryCategory时,EF引发外键关系异常(基本上,它不会自动修复子类别的ParentID与服务器分配给GalleryCategory的内容)。我是否需要在映射中做一些特殊的事情来使这个场景正常工作,还是仅仅是EF的限制,我不得不“手动”执行递归添加? – 2012-08-15 23:00:36
你可以在新的问题中发布这个细节吗?请务必包括您正在进行的全部通话。 EF应该能够通过简单地添加导航属性来建立连接。 – 2012-08-16 00:32:00