2017-12-23 10 views
0

"Tickets"및 "Toys"라는 2 개의 테이블이 있습니다. 데이터가 인 두 가지 테이블입니다.TPC를 기존 데이터와 함께 TPT로 변환하는 방법은 무엇입니까?

[Table("Toy")] 
public class Toy 
{ 
    public int ToyId{ get; set; } 
    public string Name{ get; set; } 
    public string Size{ get; set; } 
} 

[Table("Ticket")] 
public class Ticket 
{ 
    public int TicketId{ get; set; } 
    public int Type{ get; set; } 
    public int Amount{ get; set; } 
    public DateTime Date{ get; set; } 
} 

public class InheritanceMappingContext : DbContext 
{ 
    public DbSet<Toy> Toys { get; set; } 
    public DbSet<Ticket> Tickets { get; set; } 
} 

는하지만 지금은 내가 "제품"라는 이름의 테이블이 정체성이 될 것 "ID"열 폭 것이다 있도록, TPT 상속을 구현하기로 결정했다. 이제 "티켓"과 "장난감"의 두 클래스가 "Product"에서 상속되어야합니다. 하지만 데이터베이스를 업데이트하려고하면 많은 오류가 발생합니다. 이론적으로

public abstract class Product 
{ 
    public int Id{ get; set; } 
    public long Price{ get; set; } 
} 

[Table("Toys")] 
public class Toys: Product 
{ 
    public string Name{ get; set; } 
    public string Size{ get; set; } 
} 

[Table("Ticket")] 
public class Ticket: Product 
{ 
    public int Type{ get; set; } 
    public int Amount{ get; set; } 
    public DateTime Date{ get; set; } 
} 

public class InheritanceMappingContext : DbContext 
{ 
    public DbSet<Product> Products { get; set; } 
} 

내가, 내가해야 알고 : 제품에서

  1. 상속,
  2. 세트 ID가 모든 데이터에 대한 "제품", "제품"에
  3. 설정을
  4. 복사에 삽입 "제품"에 ID가 삽입됩니다. 그러나 PK 삭제 및 색인 삭제 및 Nothings 업데이트시 오류가 계속 발생합니다.
+1

수동 변환 단계가 너무 많아서 마이그레이션 할 수 없습니다. 나는 당신이 그것을 손으로 더 잘하고 그 시점에서 새로운 이주를 시작하는 것이 좋을 것이라고 생각합니다. 그건 그렇고, 당신이 묘사하는 단계는 TPH처럼 보입니다. –

+0

Gert Arnold의 답변 외에 다른 정보. TPH를 사용하면 Ticket 및 Toy (또는 Toys)에서 Table 특성을 제거해야하며 마이그레이션 중에 Products 테이블의 Discrimitator 열을 업데이트해야합니다. – bubi

답변

0

코드 첫 번째 구현은 여기 좋아 보인다. 엔티티 프레임 구현을 시도하고 재설정하십시오. 이 link에는 훌륭한 지침이 있습니다.