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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么EF Core无法自动生成ID字段?相关的知识,希望对你有一定的参考价值。

我是编程和开发的新手,正在学习,这是我的学习项目之一。我一直在尝试以各种方式解决此问题,但是当我尝试将新的Vehicle Model添加到特定的Vehicle Make时,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

我在做什么错?

答案

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

以上是关于为什么EF Core无法自动生成ID字段?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 ASP.NET Core 3.1 控制器会自动为从视图返回的 EF Core 模型分配 ID?

EF Core 生成数据库

在 EF Core/自动生成 ID 中保存实体时将 IT 留空

为啥 EF Core 5 不使用我的实体“地址”的“Id”属性上的“[Key]”属性创建“主键自动增量”?

无法从 Linq 查询 EF Core 访问字段值

EF Core - 无法添加具有相同相关对象的实体