Entity Framework 7을 사용하여 코드에서 이러한 두 모델을 어떻게 처리합니까?

asp.net-core c# entity-framework entity-framework-core jointable

문제

문제

나는 라이브러리를 시뮬레이트 할 ASP.NET 5 MVC6 개념을 증명하고있다. CTP6과 베타 3을 사용하고 있습니다.

코드 첫 번째 접근 방식을 사용하여 Entity Framework 7에서 관계를 정의하는 방법

Shelf와 Books에는 조인 테이블이 필요합니다. 내가 본대로,이 응용 프로그램은 한 번에 하나의 선반과 그 자체에 대한 책을 고려할 것입니다. 즉, 하나의 선반에는 책과 일대일 관계가 있습니다.

모델

선반 모델 :

public class Shelf
{
    public int ShelfId { get; set; }

    public string ShelfName { get; set; }

    public ShelfType MyProperty { get; set; }

    public virtual List<Book> Books { get; set; }

    public DateTime Created { get; set; }

    public string CreatedBy { get; set; }

    public DateTime Updated { get; set; }

    public string UpdatedBy { get; set; }

}

도서 모델 :

public class Shelf
{
    public int ShelfId { get; set; }

    public string ShelfName { get; set; }

    public ShelfType MyProperty { get; set; }

    public virtual List<Book> Books { get; set; }

    public DateTime Created { get; set; }

    public string CreatedBy { get; set; }

    public DateTime Updated { get; set; }

    public string UpdatedBy { get; set; }

}

내가 좋아하는 뭔가를 구현하고자하는 TPH 및 기타 기능이 아직 EF7에서 구현되지 않기 때문에 내가 곧 정상 궤도에 오전, ASP.NET 5에?

즉, 나는 다음을 생각하고있다.

  • ShelfBookViewModel (선반, 책 또는 책을 보여주기 위해 뷰 모델이 필요하고 선반에 다시 게시 할 수 있어야 함). 아마 ShelfBook이라고 이름을 지을 것입니다. 이것은 잘못된 접근법 인 것 같습니다.
  • 나는 EF7이 내가 조인하고 별도의 관심사를 위해 viewmodels를 만드는 것을 알아낼 수있는 것을 선호 할 것이다. 그렇지 않으면 SOLID 코드 관행을 위반하는 것입니다. 아래에 주어진 것과 같은 것 (이전 링크에서).
  • 조인 테이블은 아직 EF7에서 구현되지 않았으며 헛수구로 묻고 있습니까?

다음과 같이 작동하도록 다음을 수행 할 수 없었습니다.

public class Shelf
{
    public int ShelfId { get; set; }

    public string ShelfName { get; set; }

    public ShelfType MyProperty { get; set; }

    public virtual List<Book> Books { get; set; }

    public DateTime Created { get; set; }

    public string CreatedBy { get; set; }

    public DateTime Updated { get; set; }

    public string UpdatedBy { get; set; }

}

제 질문을 읽어 주셔서 감사합니다. 나는 다른 사람들이 이것을 유용하게 찾길 바랍니다.

인기 답변

many-to-many에 대한 질문에 대답하려면 다음과 같이 매핑을 정의해야합니다. (물론 모델 클래스를 업데이트해야합니다.)

modelBuilder.Entity<Shelf>() 
    .HasMany(p => p.Books) 
    .WithMany(t => t.Shelves) // doesn't exist 
    .Map(mc => 
       { 
           mc.ToTable("BookShelves"); 
           mc.MapLeftKey("ShelfId"); 
           mc.MapRightKey("BookId"); 
       });

ICollection<Shelf> Shelves { get; set; } 을 추가해야합니다. ICollection<Shelf> Shelves { get; set; }Book . 하지만 그렇게했다면 다음과 같은 내용을 얻을 것입니다 (이것은 나의 MCVE 버전의 예제입니다).

modelBuilder.Entity<Shelf>() 
    .HasMany(p => p.Books) 
    .WithMany(t => t.Shelves) // doesn't exist 
    .Map(mc => 
       { 
           mc.ToTable("BookShelves"); 
           mc.MapLeftKey("ShelfId"); 
           mc.MapRightKey("BookId"); 
       });

EF는 데이터베이스 자체에서만 볼 수있는 조인 테이블을 포함하여 관례에 따라 모든 관계를 생성하므로 매핑을 더 이상 필요로하지 않습니다.

그러나 실제 모델 클래스와 그 주위의 토론을 통해 일대 다 많은 모델이 필요할 것입니다.이 경우 Pynt의 대답을 받아 들여야하고 내 모델은 무시해야합니다.

편집하다

의견에서 Gert Arnold 가 지적했듯이, EF7은 현재 생성 된 조인 테이블을 지원하지 않습니다 (따라서 더 이상 지원하지 않을 것입니다) .

EF가 더 이상 나를 위해하지 않는다면 (경고 - 나는 단지이 이슈에 대한 루프를 닫으려고 노력하고있다 ... 나는 그렇지 않다. 컴파일러에서 이것을 시도하는 것을 귀찮게합니다, 그래서 YMMV) :

modelBuilder.Entity<Shelf>() 
    .HasMany(p => p.Books) 
    .WithMany(t => t.Shelves) // doesn't exist 
    .Map(mc => 
       { 
           mc.ToTable("BookShelves"); 
           mc.MapLeftKey("ShelfId"); 
           mc.MapRightKey("BookId"); 
       });



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.