2012-01-20 2 views
3

현재 작업중인 프로젝트의 모델을 조정하면 벽에 부딪혀 볼 수없는 것 같습니다. 오류가 생겼어. 다음과 같이왜 다음 코드를 얻을 수 없습니까? 다음 코드를 사용하여 원리의 끝을 ... 오류로 판별 할 수 없습니다.

이 구성됩니다 내가 두 클래스의 사이에 두 클래스의

public class CorePage : BaseClass 
{ 
    public CorePage() 
    { 
     this.PageContent = new HashSet<PageContent>(); 
     this.PageAliases = new HashSet<PageAlias>(); 
     this.isEditable = true; 
    } 

    public string DisplayLabel { get; set; } 
    public bool isEditable { get; set; } 

    public int? ParentPageId { get; set; } 
    public virtual CorePage ParentPage { get; set; } 

    public int TemplateId { get; set; } 
    public virtual Template Template { get; set; }   

    public int DefaultPageAliasId { get; set; } 
    public virtual PageAlias DefaultPageAlias { get; set; } 

    public virtual ICollection<PageAlias> PageAliases { get; set; } 
    public virtual ICollection<PageContent> PageContent { get; set; } 
} 

그리고

public class PageAlias : BaseClass 
{ 
    public PageAlias() 
    { 
    } 
    public string Alias { get; set; } 
    public int PageId { get; set; } 
    public virtual CorePage Page { get; set; } 
} 

관계를 맺고 있습니다.

Unable to determine the principal end of the 'Core.DataContext.PageAlias_Page' relationship. Multiple added entities may have the same primary key. 

그리고 내가 놓친 것을 발견하는 것 캔트 :

public class CorePageConfiguration : EntityTypeConfiguration<CorePage> 
{ 
    public CorePageConfiguration() 
    { 
     HasOptional(cp => cp.ParentPage).WithMany().HasForeignKey(cp => cp.ParentPageId).WillCascadeOnDelete(false); 
     HasRequired(p => p.DefaultPageAlias).WithRequiredDependent().WillCascadeOnDelete(false); 
    } 
} 

그리고

public class PageAliasConfiguration : EntityTypeConfiguration<PageAlias> 
{ 
    public PageAliasConfiguration() 
    { 
     Property(pa => pa.Alias).IsRequired().HasMaxLength(500); 
     HasRequired(pa => pa.Page).WithMany(p => p.PageAliases).HasForeignKey(pa => pa.PageId).WillCascadeOnDelete(false); 
    } 
} 

문제는이 오류가 계속됩니다.

도움을 주시면 감사하겠습니다.

감사하는 일대 한 (그리고 일대일) 관계로

답변

2

지도 DefaultPageAlias :

HasRequired(p => p.DefaultPageAlias) 
    .WithMany() 
    .HasForeignKey(cp => cp.DefaultPageAliasId) 
    .WillCascadeOnDelete(false); 
당신은 외국과의 일대일 관계를 만들 수 없습니다

동시에 기본 키 속성이 아닌 키 속성. EF는 일대일 관계를 정의하기 위해 Shared Primary Key Associations만을 지원합니다.

DefaultPageAliasPageAliases 컬렉션의 별칭 중 하나 일 수 있으므로 공유 기본 키가 모델에 적합하지 않다고 생각합니다. 즉, DefaultPageAliasId은 2 일뿐만 아니라 3 또는 다른 값일 수 있습니다. DefaultPageAlias은 항상 CorePage과 동일한 기본 키를 가져야하므로 공유 기본 키에서는 불가능합니다. CorePage에 Id = 2가있는 경우 DefaultPageAlias은 Id = 2이고 다른 값만 가질 수 있습니다.

+0

공유 기본 키 연결을 통해 귀하의 요점을 봅니다. .WithMany()와의 관계 설정에 관해서는 조금 해킹 된 것처럼 보이지만 CorePage 측에만 탐색 속성이있는 한 아프지 않을 것입니다. 나는 이것을 시험 할 것이고 모든 체크 아웃이 대답으로 표시되면 체크 할 것이다. 감사합니다. . – Drauka

+0

defaultpagealias가 pagealias 컬렉션의 개체라고 가정합니다. 제안 된 솔루션은 데이터베이스를 작성하지만 예상대로 수행하지 않습니다. 추가 도움 없이도 쉽게 얻을 수 있습니다. 그것을 작동하게하려면 내가 제어 할 수 있는지 확실하지 않은 corepage 객체를 저장할 때 컬렉션에 defaultpagealias 객체를 추가해야합니다. 아마도 영리한 방법으로 이것을 할 수있는 방법이 있지만 지금은 익숙하지 않은 방법입니다. 귀하의 도움에 감사드립니다. – Drauka

관련 문제