asp.net core-entityframeworkcore数据没有添加,而是更新

m2xkgtsf  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(311)

我正在使用asp.net core 2和实体框架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中配置了fluent 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; }

和[key]public int id{get;集合;}

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

但运气不好。
完整的代码在这个githubrepository中。
控制器在这里。

kyxcudwk

kyxcudwk1#

使用注解“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);
7eumitmz

7eumitmz2#

您将数据注解和fluent api配置混合在一起,这不是一个好的做法。无论如何,实体框架通常将持久性模型中的int-id视为键,因此您不必手动指定它。我建议您只选择一种方法(根据我的经验,fluent 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); }); ...

相关问题