为何EF Core无法自动生成ID字段?

时间:2019-09-26 13:02:18

标签: c# asp.net-core-mvc entity-framework-core

我是编程和开发的新手,正在学习,这是我的学习项目之一。我一直在尝试以各种方式解决此问题,但是当我尝试将新的“车辆模型”添加到特定的“车辆制造商”时,“ ID”列不会自动递增,而是会尝试覆盖第一个ID。

我尝试处理数据批注,我认为这是正确的,我尝试通过查询将值手动添加到数据库,并且效果很好。试图删除数据库和迁移,再次更改注释,但没有任何效果。我唯一会做错的是代码本身,可能在控制器或服务层中的某个地方。

VehicleMake类别:

public class VehicleMake
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        [Required]
        [Display(Name = "Make Name")]
        public string Name { get; set; }
        [Required]
        [Display(Name = "Abbreviation")]
        public string Abrv { get; set; }
        [Display(Name = "Models")]
        public virtual IEnumerable<VehicleModel> VehicleModels { get; set; }
    }

VehicleModel类:

public class VehicleModel
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        [Required]
        public int MakeId { get; set; }
        public virtual VehicleMake Make { get; set; }
        [Required]
        [Display(Name = "Model Name")]
        public string Name { get; set; }
        [Required]
        [Display(Name="Abbreviation")]
        public string Abrv { get; set; }
    }

车辆模型控制器:

[HttpPost]
        public IActionResult Create(int Id, VehicleModel newModel)
        {
            if (ModelState.IsValid)
            {
                newModel.MakeId = Id;
                _model.Add(newModel);
                return RedirectToAction("Index");
            }
            return View(newModel);
        }

添加新模型的服务:

public void Add(VehicleModel newModel)
        {
            _context.Add(newModel);
            _context.SaveChanges();
        }

这是它试图添加到数据库中的值,当然会给出错误 https://imgur.com/pL9EruF

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

为什么首先要将ID传递给create动作?您应该拥有:

RemoteSessionSettings

注意:

  1. 我在这里显示最少的代码。如果要排除对服务的 [HttpPost] public async Task<IActionResult> Create(VehicleModel newModel) { if (!ModelState.IsValid) return View(newModel); _context.Add(newModel); await _context.SaveChangesAsync(); return RedirectToAction("Index"); } Add的调用,就可以了。
  2. 在使用EF Core时使用异步方法。 ASP.NET Core和EF Core一直都是异步的。同步方法仅适用于在极少数情况下由于某些原因而无法使用异步的情况,而它们所做的只是阻止了异步方法。