2017-12-23 2 views
0

私は "Tickets"と "Toys"という2つのテーブルを持っています。これらは、データがの2つの異なるテーブルです。efの移行で既存のデータを使用して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の継承を実装することを決めました。今では2つのクラス、 "Ticket"と "Toys"は "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. セットアイデンティティは、すべてのデータを "製品" "製品" に
  3. セット
  4. コピーの挿入"Product"にIDが挿入されています しかし、PKの削除やインデックスの削除やNothingsの更新にはエラーがあります。
+1

手動変換の回数が多すぎるため、移行ではこれを実行できません。私はあなたが手でそれをやり直し、その点から新しい移行を開始する方がよいと思います。ちなみに、説明する手順はTPHのように見えます。 –

+0

Gert Arnoldの回答に加えて、その他の情報があります。 TPHでは、TicketとToy(またはToys)からTable属性を削除する必要があります。また、移行中にProductsテーブルのDiscrimitator列を更新する必要があります。 – bubi

答えて

0

コードの最初の実装はここでうまくいきます。エンティティフレーム実装を試してリセットしてください。このlinkには素晴らしい指示があります。

関連する問題