EF Core 2.1在添加到DbContext并保存时尝试在INSERT查询中包括主键字段

时间:2018-09-13 15:09:17

标签: dbcontext asp.net-core-2.1 ef-core-2.1 .net-core-2.1

在ASP.Net Core 2.1 Web API(带有MySQL数据库并使用Pomelo)中,如果我通过控制器操作之一将新实体添加到数据库中,则该API是从使用方接收到的客户端在主键中有一个值,似乎EF Core试图添加主键而不是允许数据库为其赋予新值。

因此...在数据库中,我有一个名为person的表,该表具有一个名为id的整数字段,该字段设置为PRIMARY KEY和AUTO-INCREMENT。

型号:

public partial class Person
{
    public int? Id { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
}

DbContext:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Person>(entity =>
    {
        entity.ToTable("person");

        entity.HasKey(e => e.Id);

        entity.Property(e => e.Id)
            .HasColumnName("id")
            .HasColumnType("int(11)");

        entity.Property(e => e.Name)
            .HasColumnName("name")
            .HasColumnType("varchar(45)");

        entity.Property(e => e.Surname)
            .HasColumnName("surname")
            .HasColumnType("varchar(45)");
    }
}

控制器操作

// POST: api/Person
[HttpPost]
public async Task<IActionResult> AddPerson([FromBody]Person person)
{
    if (!ModelState.IsValid)
        return BadRequest(ModelState);
    _context.Person.Add(person);
    await _context.SaveChangesAsync();
    return CreatedAtAction("GetPerson", new { id = person.Id }, person);
}

如果在尝试将人的ID插入数据库之前没有明确清除其ID(即person.Id = null),那么我会遇到一个异常,抱怨主键重复。这是正常的EF核心行为吗?还是我做错了什么?

0 个答案:

没有答案