在 EF Core/自动生成 ID 中保存实体时将 IT 留空
Posted
技术标签:
【中文标题】在 EF Core/自动生成 ID 中保存实体时将 IT 留空【英文标题】:Leave ID blank when saving entry in EFCore / Auto generate ID 【发布时间】:2022-01-05 19:06:14 【问题描述】:我想根据模型在我的数据库中创建一个新条目。
当我将我的 dto 自动映射到数据库的实际模型时,id 属性变为:0。 数据库中已经有一个 id 为 0 的条目。如何忽略 id 值并为数据库自动生成 id?
public async Task<WikiDetailDto> AddWiki(WikiDetailDto wikiDetailDto)
WikiPage newPage;
newPage = mapper.Map<WikiPage>(wikiDetailDto);
newPage.CategoryId = wikiDetailDto.Category.Id;
await _context.AddAsync(newPage);
await _context.SaveChangesAsync();
return wikiDetailDto;
【问题讨论】:
【参考方案1】:嗯,首先你需要在数据库模型中用属性或流式模型配置注释Id
属性。
modelBuilder.Entity<TEntity>()
.HasKey(entity => entity.Id);
或
[Key]
public int Id get; set;
据我记得,EF 可以通过Id
或SmthId
等模式自动识别属性,但不确定。
然后你只需将 0 作为 Id 属性的值传递(默认情况下 int 等于 0),在调用 DbContext.SaveChanges()
后,将生成属性 Id
并保存到属性中。
【讨论】:
Id 被视为没有注释的主键,但是当 id = 0 时,我会收到错误,因为 0 已经存在于数据库中,当我手动将其设置为 1000 时,它会保存。 您是否从头开始使用代码优先方法?我的意思是,您有迁移并通过迁移应用所有模型更改? 这是一个数据库优先项目。我通过 PMC 自动生成了模型和 DBContext以上是关于在 EF Core/自动生成 ID 中保存实体时将 IT 留空的主要内容,如果未能解决你的问题,请参考以下文章
为啥 EF Core 5 不使用我的实体“地址”的“Id”属性上的“[Key]”属性创建“主键自动增量”?