如何更新使用“ DatabaseGeneratedOption.Identity”配置的实体字段?

时间:2019-02-21 15:58:31

标签: entity-framework .net-core

我有一个模型 Article ,在其中创建了一个 position 字段

public class Article : BaseEntity
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int position { get; set; }
}

我想通过Web服务更新 position 字段:

[HttpPut]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(typeof(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary), StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesDefaultResponseType]
public async Task<ActionResult<Article>> PutArticle([FromBody] Article article)
{
    try
    {
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException)
    {
        if (!ArticleExists(article.ID))
        {
            return NotFound();
        }
        {
            throw;
        }
    }
    return Ok(article);
}

不幸的是,我一直备有这个问题:

  

SqlException:无法更新标识列“ position”。

enter image description here

我尝试了cannot update identity column in Entity Framework Core那里提出的每个解决方案,但没有任何效果。这样配置AppDbContext时,实际上没有更多错误。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Article>().Property(u => u.position).Metadata.IsReadOnlyAfterSave = true;
} 

但是位置未保存(其他字段已保存)

顺便说一句,我正在使用Entity Framework 2.2

0 个答案:

没有答案