ASP.Net核心 - EntityFrameworkCore数据未添加,而是更新

时间:2018-01-16 10:27:32

标签: mysql asp.net entity-framework entity-framework-core asp.net-core-2.0

我正在使用ASP.Net Core 2和Entity Framework Core与MySQL。

我想在数据库中添加一个简单的实体。

我的模型是这样的 -

public class Employee
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public string City { get; set; }
    [Required]
    public string Department { get; set; }
    [Required]
    public int Salary { get; set; }
}

我在DBContext中配置了像这样的流畅API -

//Key automatic generation configuration
modelBuilder.Entity<Employee>()
   .Property(b => b.Id)
   .ValueGeneratedOnAdd();

然后从控制器调用添加这样的内容 -

Employee employee = new Employee
{
     City = newString,
     Department = newString,
     Name = newString,
     Salary = DateTime.UtcNow.Millisecond
};

_context.Employee.Add(employee);
_context.SaveChanges();

我所看到的是更新 ID = 1 的第一个数据,并且从不添加新数据。我希望我的ID能够自动递增,并且不想使用GUID来维护ID。我需要做些什么来使其发挥作用?

更新 -

我已经尝试过了 -

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

和     [键]     public int Id {get;组; }

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

但没有运气。

完整的代码位于this Github Repository

控制器 here

2 个答案:

答案 0 :(得分:0)

使用注释“DatabaseGeneratedOption.Identity”进行自动增量。

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

迁移文件应如下生成:

CreateTable(
      "dbo.table",
      c => new
      {
        Id = c.Int(nullable: false, identity: true),
        .............
      })
      .PrimaryKey(t => t.Id);

答案 1 :(得分:0)

您正在混合数据注释和流畅的api配置,这不是一个好习惯。无论如何,实体框架将持久性模型中的int Id视为关键,因此您不必手动指定它。我建议你只选择一种方法(从我的经验来看,流畅的api通常更好 - 未来更具可扩展性,持久性模型看起来更干净)并试着去指定Id应该或不应该改变因为没有它你会得到你的东西想。

您的迁移应如下所示:

migrationBuilder.CreateTable( name: "TableName", columns: table => new { Id = table.Column<int>(nullable: false) .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn) }, constraints: table => { table.PrimaryKey("PK_TableName", x => x.Id); }); ...