8

에서 설정 엔티티 관계로 우리는 EF 코어에하고 어떻게 항목) : 내용, 게시물, 양식 등3 표를 얻었다 여기 엔티티 프레임 워크 핵심

내 모델 정의

public class Item 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public decimal Price { get; set; } 
    public Link Link { get; set; } 
} 

public class News 
{ 
    public int Id { get; set; } 
    public string Header { get; set; } 
    public string Content { get; set; } 
    public Link Link { get; set; } 
} 

public class Link 
{ 
    public int Id { get; set; } 
    public string Type { get; set; } 
    public int RowId { get; set; } 
    public string Url { get; set; } 
} 

Links은 모든 뉴스 및 모든 항목의 URL을 설명합니다. 이것은 Links 4 열 것을 의미한다 : - 뉴스 나 항목

  • 의 RowId -

    1. 아이디
    2. 유형 항목의 ID를 포함하거나 뉴스 (유형에 따라 다름)
    3. URL

    관계를 설정하는 방법은 무엇입니까? 링크 테이블에서 URL별로 엔티티를 확인해야합니다.

  • +5

    다음 번에 더 자세한 제목을 사용하고 적절한 태그를 사용하십시오. [tag : entity-framework]는 이전 EntityFramework (1 ~ 6.x) 용입니다. [tag : entity-framework-core]는 처음부터 새로 작성한 EF Core부터 마지막으로 중요하지만이 유형의 질문을하기 전에 문서를 더 빠르고 쉽게 사용할 수 있습니다. https://docs.microsoft.com/en 대답을 기다리는 대신 -us/ef/core/modeling/relationships;) – Tseng

    +0

    EF 코어.이 링크 (내용, 카탈로그 및 기타)가 포함 된 많은 데이터 및 많은 개체가 있기 때문에 기존 데이터베이스와 DB를 수정하는 것이 바람직하지 않습니다. – Alex

    +4

    FK 제약 조건으로 설명 할 수없는 데이터베이스 모델을 설명하고 있습니다. 코어를 포함하여 EF 버전에는 매핑 할 수 없습니다. –

    답변

    1

    Dapper. 사용자 정의 쿼리를 작성할 수있는 Just Dapper.

    0

    업데이트


    나는 당신의 질문은 한 번 더 읽고 잘 단지 등 뉴스 및 항목에 열을 추가하고, 링크에 대한 다른 테이블을 만들 필요가 없습니다 솔직히 말해서 .. 너 괜찮을거야.

    public class Item 
    { 
        public int Id { get; set; } 
        public string Name { get; set; } 
        public decimal Price { get; set; } 
        public string Url { get; set; } 
    } 
    
    public class News 
    { 
        public int Id { get; set; } 
        public string Header { get; set; } 
        public string Content { get; set; } 
        public string Url { get; set; } 
    } 
    
    +0

    좋은 생각이 뉴스에 대한인지를 말하는 입력 및 항목. 그러나 뉴스와 항목을 제외하고 컨텐트와 같은 다른 엔티티가 있기 때문에 링크 테이블을 수정하고 열을 추가하지 않습니다. 따라서 NULL이 될 것입니다. 그것이 바로 RowId와 Type입니다. 'HasDiscriminator' 또는 다른 트릭과 같은 것을 사용할 수 있습니까? – Alex

    +0

    @Alex는 대답 – Valkyrie

    +0

    을 어떻게 업데이트 했습니까? 'foreach'는 모든 테이블이 좋지 않습니다. Btw, 트리 메뉴를 설명하는 Menu 테이블이 있습니다. – Alex

    0

    내가 널 (NULL) int를 사용하고,이 테이블에 대한 외부 키를 분리 Link을 변경 것 :

    public class Link 
    { 
        public int Id { get; set; } 
        public string Type { get; set; } 
        public int? NewsId { get; set; } 
        public int? ItemId { get; set; } 
        public string Url { get; set; } 
    } 
    
    +0

    아니요, 여기에는 뉴스와 항목을 제외한 많은 엔티티가 있기 때문입니다. – Alex

    0

    을 당신이 링크 테이블의 ROWID를 제거 할 수 있습니다 생각하고 외부 키를 추가 링크 테이블의 id 열을 참조하는 다른 2 개의 테이블의 열.

    이제 URL이 있으면 유형 및 ID를 갖기 때문에 각 표의 콘텐츠를 쿼리 할 수 ​​있습니다. ContextDB에 매핑되지로 설정 한 후이 속성을

    public int RowId { 
        public get { 
         return this.Type.equals("news") ? NewsId.Value : ItemId.Value; 
        }; 
        private set { 
         if(this.Type.equals("news")){ 
          NewsId = value; 
         } 
         else{ 
          ItemId = value; 
         } 
        } 
    } 
    

    을 그리고 :

    0

    다른 두 테이블 속성 NewRow 및 제약을하기 위해, 당신은 이런 식으로 구현 콜드.