2012-05-04 12 views
3

私は、フォルダとファイルを表す一連のオブジェクトを持っています。フォルダにはもちろん、ファイルのコレクションを持つことができますが、サブフォルダを持つこともできます。フォルダには親フォルダへの参照が戻っています。おそらくトラブルが起きている場所です。また、フォルダにはアイコンが関連付けられています。EFコード初回循環参照

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] *

私は循環参照がここにあるわけではありません。フォルダはIconを一度しか参照せず、Iconはフォルダを全く参照しません。

これは関連しているかもしれませんが、親フォルダのFolderIdにParentFolderIdマップを正しく戻す方法がわかりません。

アイデア?

+0

これは何らかの形でFileInformationに関係しますか?私はあなたが表示するコードで循環参照を取得しません。 –

+0

これ以外に流暢な設定をしていますか? – NSGaga

+0

あなたは答えを見つけましたか?私は同様のシナリオに直面している。 – Shimmy

答えて

0

[キー]で変更されたFolderId、IconIdの代わりにHiの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; } 
}