【问题标题】:ASP.Net Core - EntityFrameworkCore data is not adding, updating insteadASP.Net Core - EntityFrameworkCore 数据未添加,而是更新
【发布时间】:2025-12-04 02:35:01
【问题描述】:

我正在使用 ASP.Net Core 2 和带有 MySQL 的 Entity Framework Core。

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

我的模型是这样的-

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

并且 [钥匙] 公共 int ID { 获取;放; }

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

但没有运气。

完整代码在this Github Repository

控制器是here

【问题讨论】:

  • 数据库中的列是否设置了自增?
  • 听起来像提供程序错误。您使用的是哪个提供商?无论如何,Add 不应该生成 UPDATE,打开 EF Core logging 并查看执行的命令。
  • 你所拥有的应该可以工作。实际上,实际上不需要任何流利的配置或数据注释。您选择发布的代码中未显示其他内容。我建议发布一个更完整的代码示例,特别是一个小的可复制示例。

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


【解决方案1】:

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

【讨论】:

  • 你能给我另一种方法吗@Mittal
  • 我了解到您需要自增列作为ID,您还有什么想要实现的吗?
  • 你是否创建了迁移文件,它应该看起来像上面的更新?
【解决方案2】:

您正在混合数据注释和流畅的 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); }); ...

【讨论】: