EF Code First Cyclical Reference

时间:2012-05-04 01:50:09

标签: entity-framework ef-code-first

我有一系列代表文件夹和文件的对象。文件夹当然可以有一组文件,但它们也可以有子文件夹。文件夹有一个返回父文件夹的引用。这可能是麻烦开始的地方。此外,文件夹可以有一个与之关联的图标。

public class Folder
{
    [Key]
    public int FolderId { get; set; }
    public string FolderName { get; set; }
    public int ParentFolderId { get; set; }
    public virtual Folder ParentFolder { get; set; }
    public int IconId { get; set; }
    public virtual Icon Icon { get; set; }

    public virtual ICollection<FileInformation> FileInformations { get; set; }
    public virtual ICollection<Folder> Folders { get; set; }
}

public class Icon
{
    [Key]
    public int IconId { get; set; }
    public string IconUrl { get; set; }
    public string Description { get; set; }
}

当我运行应用程序并尝试获取图标列表时,我收到以下错误消息:

* 引用关系将导致不允许循环引用。 [约束名称= FK_Folder_Icon_IconId] *

我不是100%的循环引用在这里。文件夹仅引用Icon一次,而Icon根本不引用文件夹。

一个问题,这可能是相关的,是我不确定如何正确地将ParentFolderId映射回父文件夹的FolderId。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

嗨改变Id而不是用[key]修改的FolderId,IconId。因为你不使用映射的流畅代码,而EF只能假设与名称和类型的关系。

它正在发挥作用。

public class Folder
{
    [Key]
    public int Id { get; set; }

    public string FolderName { get; set; }
    public virtual int ParentId { get; set; } /*ParentFolderId*/
    public virtual Folder Parent { get; set; } /*ParentFolder*/
    public virtual int IconId { get; set; }
    public virtual Icon Icon { get; set; }

    public virtual ICollection<Folder> Children { get; set; } /*not Folders*/

   //it is out of subject 
   //public virtual ICollection<FileInformation> FileInformations { get; // set; }
}

public class Icon
{
    [Key]
    public int Id { get; set; }

    public string IconUrl { get; set; }
    public string Description { get; set; }
}