2014-10-10 3 views
1

먼저 코드에서 EF6의 엔티티에 대한 히스토리 테이블을 구현하려고합니다.엔티티 프레임 워크 클래스 당 클래스 상속

상속을 사용하여이를 수행 할 방법이있을 것이라고 생각했습니다. 히스토리 테이블. 실제 테이블 엔티티의 파생 된 유형으로, 모든 특성의 직선 사본 만 포함합니다. 키 편집과 함께.

Booking에 대한 내 코드의 첫 번째 테이블 엔티티 구성입니다.

public class BookingEntityConfiguration 
    : EntityTypeConfiguration<Booking> 
{ 
    public BookingEntityConfiguration() 
    { 
     Property(b => b.BookingId).HasColumnOrder(0); 
     HasKey(b => new { b.BookingId }); 

     HasOptional(b => b.BookingType) 
      .WithMany() 
      .HasForeignKey(c => c.BookingTypeId); 
    } 
} 

BookingHistory에 대한 내 코드의 첫번째 테이블 엔티티 구성입니다.

public class BookingHistoryTypeEntityConfiguration 
    : EntityTypeConfiguration<BookingHistory> 
{ 
    public BookingHistoryTypeEntityConfiguration() 
    { 
     Property(b => b.BookingId).HasColumnOrder(0); 
     Property(b => b.BookingVersion).HasColumnOrder(0); 
     HasKey(b => new { b.BookingId, b.BookingVersion }); 
    } 
} 

경우

public class BookingHistory : Booking { } 

테이블 개체에 이러한 참조가 포함 데이터베이스에 연결된 상황에서 발생하지 도착 결코 내 BookingHistory 테이블 : 달성 할 수있는 간단한 방법이 있나요

public DbSet<Booking> Bookings { get; set; } 
public DbSet<BookingHistory> BookingHistories { get; set; } 

을 내가 원하는거야? 파생 된 엔티티 (히스토리 테이블)는 기본 클래스 엔티티와 동일한 열 필드를 포함하지만 키가 변경된 테이블을 생성합니다.

나는 위의 코드를 매우 순진하다고 생각하지만, 도움이되는 비슷한 블로그 게시물을 찾을 수없는 것 같습니다. ToTable으로

public class BookingsContext : DbContext 
{ 

    public DbSet<Booking> Bookings { get; set; } 
    public DbSet<BookingHistory> BookingHistories { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<BookingBase>() 
      .HasKey(p => p.BookingId) 
      .Property(p => p.BookingId) 
         .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

     modelBuilder.Entity<Booking>().Map(m => 
      { 
       m.MapInheritedProperties(); 
       m.ToTable("Booking"); 
      }); 

     modelBuilder.Entity<BookingHistory>().Map(m => 
      { 
       m.MapInheritedProperties(); 
       m.ToTable("BookingHistory"); 
      }); 
    } 
} 

당신이 두 개체가 서로 다른 테이블에 매핑되도록 지정 :

+1

LOL ... 감사합니다. 나는이 모든 게시물을 읽었지만, 그들 중 누구도 내가 필요로하는 것을 실제로 돕지는 않는다. 물론 가능하지 않을 수도있다. 그러나 머리카락을 잡아 당기는 낭비보다 전문가의 말을 항상 듣는 것이 좋습니다. – tigerswithguitars

답변

1

가장 좋은 방법은 기업의 역사 엔티티 상속 둘 다있는 기본 유형을하는 것입니다. 또한 MapInheritedProperties은 기본 유형의 모든 속성을이 테이블에도 매핑하도록 EF에 지시합니다. 결과는 2 개의 개별적인 DbSet 속성으로 처리 할 수있는 완전히 독립적 인 두 개의 테이블입니다.

+0

OK ... 역사가 예를 들어 예약에서 상속받는 경우, 모든 동일한 필드가 포함되며 키를 별도로 설정할 수 있습니다. 나는 이것을 줄 것이다. – tigerswithguitars

관련 문제