C# 为什么';EF核心自动生成id字段?
我是编程和开发新手,我正在学习,这是我的学习项目之一。我一直试图以各种方式解决这个问题,但当我尝试将新车型添加到特定的车辆品牌时,Id列不会自动递增,而是尝试覆盖第一个Id 我试着处理数据注释,我认为这是正确的,我试着通过查询向数据库手动添加值,它工作得非常好。尝试删除数据库和迁移,再次更改注释,但没有任何效果。我唯一可能出错的就是代码本身,可能是在控制器或服务层的某个地方 车辆品牌等级:C# 为什么';EF核心自动生成id字段?,c#,asp.net-core-mvc,entity-framework-core,C#,Asp.net Core Mvc,Entity Framework Core,我是编程和开发新手,我正在学习,这是我的学习项目之一。我一直试图以各种方式解决这个问题,但当我尝试将新车型添加到特定的车辆品牌时,Id列不会自动递增,而是尝试覆盖第一个Id 我试着处理数据注释,我认为这是正确的,我试着通过查询向数据库手动添加值,它工作得非常好。尝试删除数据库和迁移,再次更改注释,但没有任何效果。我唯一可能出错的就是代码本身,可能是在控制器或服务层的某个地方 车辆品牌等级: public class VehicleMake { [Key]
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; }
}
车型控制器:
[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();
}
下面是它试图添加到db中的值,当然给出了一个错误
我做错了什么?首先为什么要将id传递给创建操作?你应该有:
[HttpPost]
public async Task<IActionResult> Create(VehicleModel newModel)
{
if (!ModelState.IsValid)
return View(newModel);
_context.Add(newModel);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
[HttpPost]
公共异步任务创建(车辆模型newModel)
{
如果(!ModelState.IsValid)
返回视图(新模型);
_Add(newModel);
wait_context.SaveChangesAsync();
返回操作(“索引”);
}
注:
Add
和savechangesync
的调用分解到服务中,这很好在创建时,您不应传递id,它的默认值应为0,也不应传递db实体/模型作为viewModel,不要按顺序设置id,它将工作……对于id,我在这里传递模型的make id,因为它无法识别我为哪个品牌添加模型。至于异步方法,我将实现它们,谢谢你。你仍然不需要这样做。在你的模型上。直接绑定到
MakeId
。
[HttpPost]
public async Task<IActionResult> Create(VehicleModel newModel)
{
if (!ModelState.IsValid)
return View(newModel);
_context.Add(newModel);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}