.NET Core API 错误数据库操作中无法在数据库中插入新数据

Cannot Insert new Data in the Database in .NET Core API error Database operation

我正在处理 API 并开始添加新数据。我收到此错误。当我在每个输入中手动添加 ID 时,它工作正常,但现在我收到此错误,在从此处添加一些解决方案后,它仍然无法工作。

错误:

Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: Database operation expected to affect 1 row(s) but actually affected 0 row(s).
Data may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=527962 for information on understanding and handling optimistic concurrency exceptions.

插入代码:

    public bool Insert(string UserName, SendInventoryModel sendInventoryModel)
    {
        using (DatabaseContext context = new DatabaseContext())
        {
            bool flag = false;

            // Create new
            InventoryEntity inventoryEntity = new InventoryEntity 
            {
                UserName = sendInventoryModel.UserName,
                Item = sendInventoryModel.Item ,
            };
            context.Table.Add(inventoryEntity);
            context.SaveChanges();

            // Check
            var model = CheckUserNameID(UserName, sendInventoryModel.Item);
            var data = context.Table.Find(model.Id);

            if (null != data)
            {
                flag = true;
            }

            return flag;
        }
    }

发送库存模型:

public class SendSiteMailModel
    {
        [Required]
        public string UserName { get; set; }

        [Required]
        public string Item{ get; set; }
    }

库存控制器:

[HttpPost("{username}")]
[Authorize]
public JObject Post([Required] string UserName, [FromBody] SendInventoryModel sendInventoryModel)
{
    ResponseModel x = new ResponseModel();

    try
    {
        InventoryRepository InventoryRepository = new InventoryRepository();
        bool isSuccess = InventoryRepository.Insert(UserName, sendInventoryModel);
    }
    catch (Exception error)
    {
        // if not successful
    }

    return Json(x);
}

我已经在 InventoryEntityInventoryModel 中添加了 [DatabaseGenerated(DatabaseGeneratedOption.Identity)]

库存实体:

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

库存模型:

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

我还在 DBContext.cs 中添加了以下代码:

public virtual DbSet<OtherTableEntity> Table{ get; set; }
public virtual DbSet<InventoryEntity> Table{ get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
     modelBuilder.Entity<OtherTableEntity>();
     modelBuilder.Entity<InventoryEntity>().Property(x => x.Id).ValueGeneratedOnAdd();

     base.OnModelCreating(modelBuilder);
}

partial void OnModelCreatingPartial(ModelBuilder modelBuilder);

最后添加我的 table 设计:库存 ID:

(Is Identity) = Yes
Identity Increment = 1
Identity Seed = 1

请注意,清单 table 中没有 主键 。它是一个 旧的 table,具有 现有数据 。当前数据库已从 membership 迁移到 identity

我在插入方法中添加了所有东西后 context.SaveChanges(); 仍然不起作用。关于如何解决此问题的任何想法或建议?

注意:我已经根据 Asherguru 的建议更改了 table 实体名称和模型,因为它有点令人困惑和通用。

您的Table实体和数据库中的Table是否相同table名称?

为什么名称不同 - Table实体和 Table?

尝试在 Table 实体 class 中添加 [Table("YourTableNameInDatabase")]。然后 EF 可以在数据库中找到实际的 table 并插入到这个 table.

[Table("YourTableNameInDatabase")]
public partial class TableEntity
{
      public int Id { get; set; }
}

如果您显示实际的 table 名称和一些必要的屏幕截图,就不会那么混乱。