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; }
}
私は、私がすべき知っている:製品から
- 継承、
- セットアイデンティティは、すべてのデータを "製品" "製品" に
- セット
- コピーの挿入"Product"にIDが挿入されています しかし、PKの削除やインデックスの削除やNothingsの更新にはエラーがあります。
手動変換の回数が多すぎるため、移行ではこれを実行できません。私はあなたが手でそれをやり直し、その点から新しい移行を開始する方がよいと思います。ちなみに、説明する手順はTPHのように見えます。 –
Gert Arnoldの回答に加えて、その他の情報があります。 TPHでは、TicketとToy(またはToys)からTable属性を削除する必要があります。また、移行中にProductsテーブルのDiscrimitator列を更新する必要があります。 – bubi