ef core 1.1使用ValueGeneratedOnAdd自动生成的列

时间:2017-11-22 04:48:39

标签: entity-framework ef-core-2.0

使用 EfCore 1.1 ,我正在尝试使用ValueGeneratedOnAdd生成自动生成的列。问题是我总是将值变为“0”。我是否必须手动对数据库表执行任何操作?

这是我的模特

public class Contact
{
    public int Id { get; set; }

   // This needs to be auto generated
    public Int32 ContactIndex { get; set; } 

    public string FullName { get; set; }
    public string Email { get; set; } 
    public DateTime LastAccessed { get; set; }
}

这就是我的OnModelCreating的样子

        protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Contact>()
            .Property(c => c.ContactIndex)
            .ValueGeneratedOnAdd();
          // I tried following as well but it did't work
           // .HasDefaultValueSql("IDENTITY(int, 1,1)");
        ;
    }

1 个答案:

答案 0 :(得分:0)

好吧我想到了怎么做,但我真的想在不使用任何注释的情况下这样做,而且我仍然无法弄清楚如何在没有模型注释的情况下做到这一点。所以这是我的解决方案。

您需要在模型中注释您的字段,如下所示

public class Contact
{
    public int Id { get; set; }

     [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Int32 ContactIndex { get; set; } 

    public string FullName { get; set; }
    public string Email { get; set; } 
    public DateTime LastAccessed { get; set; }
} 

并在上下文类中添加OnModelCreating。这将告诉实体框架在添加或更新记录时忽略该列。确保调用方法.ValueGeneratedAddOrUpdate()。如果仅使用.ValueGeneratedAdd(),则在进行更新时会出现错误。

    protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Contact>()
        .Property(c => c.ContactIndex)
        .ValueGeneratedOnAddOrUpdate();
    ;
}

生成并运行迁移,迁移应包括&#34; SqlServerValueGenerationStrategy.IdentityColumn&#34;

protected override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.AddColumn<int>(
        name: "ContactIndex",
        table: "Contact",
        nullable: false,
        defaultValue: 0)
        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
}