有没有办法在实体框架迁移上播种数据。但我们不需要在播种时提供主键值
Posted
技术标签:
【中文标题】有没有办法在实体框架迁移上播种数据。但我们不需要在播种时提供主键值【英文标题】:Is there any way to seed data on entity framework migration. but we don't need to provide primary key value on seeding 【发布时间】:2021-11-11 11:12:40 【问题描述】:模型类:
public class Model
[Key]
public int Id get; set;
public string Name get; set;
dbContext 类
public class AppDbContext : DbContext
public AppDbContext (DbContextOptions<AppDbContext> options)
: base(options)
protected override void OnModelCreating(ModelBuilder modelBuilder)
modelBuilder.Entity<Model>().HasData(
new Model Name = "William",
new Model Name="Altaf"
);
public DbSet<DataSeedingEntityFramework.Model> Model get; set;
当我迁移 dbcontext 时显示此错误:
无法添加实体类型“模型”的种子实体,因为属性“Id”需要非零值。考虑提供一个负值以避免与非种子数据发生冲突。
我知道为什么会显示此错误,但我想在没有 Id 值的情况下进行迁移。它应该是自动递增的。
【问题讨论】:
【参考方案1】:你应该添加
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
这将告诉 EF Core 该实体具有自动增量字段 ID。 要在迁移时启用数据种子,请将代码从 DbContext 类中的 OnModelCreating 方法移动到迁移类中的 Up 方法。详情请见this page。
【讨论】:
以上是关于有没有办法在实体框架迁移上播种数据。但我们不需要在播种时提供主键值的主要内容,如果未能解决你的问题,请参考以下文章