2017-12-27 1 views
1

나는 페이지와 태그의 연결을 나타내는 클래스를 가지고 있으며 더 많거나 적은 같은 외모 : 내 데이터베이스에서엔티티 프레임 워크 - 일 개 관계에 많은 두 테이블에 하나 개의 클래스를 매핑

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

    public int PageId { get; set; } 

    public int TagId { get; set; } 

    public string TagName { get; set; } 
} 

나는 2 개의 테이블을 가지고 싶습니다 : TagLinksTagNames. 첫 번째 것은 Id, PageIdTagId이고 두 번째 것은 TagIdTagName입니다.

태그 ID를 외래 키로 지정하여 하나의 태그 이름에 많은 태그 링크를 할당 할 수 있습니다.

EntityTypeConfiguration으로 시도해 보았지만 제대로 구성하는 방법을 모르겠습니다. 나는이 진형

ALTER TABLE [dbo].[TagNames] WITH CHECK ADD CONSTRAINT [FK_dbo.TagNames_dbo.TagLinks_TagId] FOREIGN KEY([TagId]) 
REFERENCES [dbo].[TagLinks] ([TagId]); 

ALTER TABLE [dbo].[TagNames] CHECK CONSTRAINT [FK_dbo.TagNames_dbo.TagLinks_TagId] 

:

public class TagLinkEntityConfiguration : EntityTypeConfiguration<TagLink> 
{ 
    public TagLinkEntityConfiguration() 
    { 
     HasKey(e => e.Id); 
     HasKey(e => e.TagId); 

     Property(e => e.Id).HasColumnName(nameof(TagLink.Id)); 
     Property(e => e.PageId).HasColumnName(nameof(TagLink.PageId));   
     Property(e => e.TagId).HasColumnName(nameof(TagLink.TagId)); 
     Property(e => e.TagName).HasColumnName(nameof(TagLink.TagName)); 

     Map(m => 
     { 
      m.Properties(e => new 
      { 
       e.Id, 
       e.PageId,      
       e.TagId 
      }); 
      m.ToTable("TagLinks"); 
     }); 

     Map(m => 
     { 
      m.Properties(e => new 
      { 
       e.TagId, 
       e.TagName 
      }); 
      m.ToTable("TagNames"); 
     }); 
    } 
} 

가 어떻게 그것을 하나 개의 관계에 많은 작업을해야합니까 그것은 나에게 다음과 같이 내장되어 잘못된 외래 키를 준다?

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

    public int PageId { get; set; } 

    public int TagId { get; set; } 

    public Tag Tag { get; set; } 
} 

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

    public string Name { get; set; } 

    public virtual ICollection<TagLink> TagLinks { get; set; } 
} 

TagLinkEntityConfiguration 정의를 건너 뛰고 EF의 코드 첫 번째 규칙이 인수 할 수 있도록하고 해결 : 나는 외래 키가

+0

@mjwills 나는 내 질문을 편집하여 데이터베이스에 생성 된 내용을 게시했습니다. – krajol

답변

0

이 사용 해보세요 TagNames 표에 TagId를 참조 TagLinks 테이블에 추가해야합니다 생각 당신을위한 문제.

+0

물론이 솔루션에 대해 알고 있지만 그게 내가 피하고 싶었던 것입니다. 나는 오직 한 수업에만 충실하고 싶습니다. 어쨌든 고마워! – krajol

+0

질문에 더 분명하게 나타낼 수 있습니다. AFAIK에는 여러 클래스를 사용하지 않고 EF에서 다 대일 관계를 만들 수있는 방법이 없습니다. – chambo

+1

테이블 분할 또는 중복 된 TagName 값과의 다 대일 관계를 사용하여 일대일 관계로 수행 할 수 있지만 단일 클래스는 EF에서 정규화 된 다 대일 관계를 지원하지 않습니다. – chambo

관련 문제