3

フォルダーとファイルを表す一連のオブジェクトがあります。もちろん、フォルダーにはファイルのコレクションを含めることができますが、サブフォルダーを含めることもできます。フォルダーには、親フォルダーへの参照があります。これはおそらく問題の始まりです。また、フォルダにはアイコンを関連付けることができます。

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% ではありません。フォルダーはアイコンを一度だけ参照し、アイコンはフォルダーをまったく参照しません。

1 つの問題 (これに関連している可能性があります) は、ParentFolderId を親フォルダーの FolderId に正しくマップする方法がわからないことです。

何か案は?

4

1 に答える 1

0

こんにちは、[key] で変更された FolderId、IconId の代わりに Id を変更します。流暢なコードのマッピングを使用せず、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; }
}
于 2012-06-05T07:18:58.013 に答える