实体框架迁移不会生成标识列

时间:2018-07-07 21:21:19

标签: c# sql-server asp.net-mvc entity-framework-6 ef-fluent-api

我有一个名为Id的整数属性模型,当我进行迁移时,该属性不会将Id属性生成为Identity。

这是Fluent API(一对零/一个关系)配置。

Property(fv => fv.Id) //I just put this property to summarize
  .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
  .HasColumnName("Codigo");

HasOptional(fv => fv.Presupuesto)
  .WithOptionalDependent(p => p.FacturaVenta)
  .Map(m => m.MapKey("PresupuestoCodigo"));

在进行迁移时,迁移以这种方式显示:

public override void Up()
{
    CreateTable(
       "dbo.FacturaVentas",
       c => new
       {
           Codigo = c.Int(nullable: false), //Why is not Identity?
           PresupuestoCodigo = c.Int(),
       })
       .PrimaryKey(t => t.Codigo)
       .ForeignKey(t => t.PresupuestoCodigo)
       .Index(t => t.Codigo)
}

这些是我的模特

public class FacturaVenta
{
    public int Id { get; set; }
    public Presupuesto Presupuesto { get; set; }
}

public class Presupuesto
{
    public int Id { get; set; }
    public FacturaVenta FacturaVenta { get; set; }
}

我该如何解决?

1 个答案:

答案 0 :(得分:0)

今天只是我自己来解决这个问题,似乎有时Entity Framework并不能确定自动生成了列。您可以使用值为DatabaseGenerated的属性DatabaseGeneratedOption.Identity强制Entity Framework在迁移中添加identity: true值。

using System.ComponentModel.DataAnnotations.Schema;
namespace MyApp {
  public class MyEntity {
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
  }
}

如果实体之间的关系为零/一对一,则还可以将相关实体的ID设置为Key属性

using System.ComponentModel.DataAnnotations;
namespace MyApp {
  public class MyForeignEntity {
    public int Id { get; set; }
  }

  public class MyEntity {
    [Key]
    public int ForeignId { get; set; }
    public virtual MyForeignEntity Foreign { get; set; }
  }
}

在这种情况下,该ID已设置为可以正常工作。