如何使用ef迁移中的现有数据将TPC转换为TPT?

时间:2017-12-23 11:59:49

标签: c# sql entity-framework

我有两张名为“Tickets”和“Toys”的表。这些是2个不同的表格,数据

    [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; }
}

但是现在我决定实现TPT继承,这样我将有一个名为“Product”宽度的表和一个“Id”列,它将是标识。现在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. 将所有数据复制到“产品”
  5. 在“产品”中设置身份插入 但它在丢弃PK并丢弃索引和Nothings更新时仍然存在错误。

1 个答案:

答案 0 :(得分:0)

这里的代码优先实现看起来不错。尝试并重置实体框架实现。这个link有很好的指示。