2012-05-04 3 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] *

여기서 순환 참조가있는 곳은 100 %가 아닙니다. 폴더는 Icon을 한 번만 참조하며 Icon은 폴더를 전혀 참조하지 않습니다.

한 가지 문제가 있습니다.이 문제는 관련이있을 수 있습니다. 상위 폴더의 FolderId에 ParentFolderId 맵을 올바르게 다시 작성하는 방법을 모르겠습니다.

아이디어가 있으십니까?

+0

어떤 식 으로든 FileInformation이 관련되어 있습니까? 내가 보여주는 코드로 순환 참조를 얻지 못합니다. –

+0

이 외에는 유창한 구성을 수행하고 있습니까? – NSGaga

+0

답변을 찾았습니까? 나는 비슷한 시나리오에 직면하고있다. – Shimmy

답변

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; } 
}