如何在EF Core中为SQLite创建自增列?(UWP/.NET Standard项目问题)
解决EF Core 2.0 SQLite Code First中主键自增列值全为0的问题
这个问题我之前也碰到过,SQLite对自增列的要求和EF Core的配置是挂钩的,你现在的情况大概率是没让EF Core明确知道这个主键列是由数据库自动生成的,所以EF默认给它赋值0,而SQLite也没触发自增逻辑。给你几个关键的解决步骤:
修正主键的配置(二选一即可)
要么用数据注解直接标注属性:[Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Int32 No { get; set; }要么在Fluent API里补充生成规则,你原来的配置只指定了主键,得加上
ValueGeneratedOnAdd():modelBuilder.Entity<TurnosGeneral>() .HasKey(t => t.No) .Property(t => t.No) .ValueGeneratedOnAdd();这一步是核心——SQLite的整数主键要成为自增列,必须让EF Core知道这个值是插入时由数据库生成的,否则EF会自己把未赋值的int类型属性设为0,数据库也不会主动覆盖这个值。
更新数据库结构
如果你的数据库已经创建过了,光改配置没用,得更新表结构:- 在Package Manager Console里运行
Add-Migration FixIdentityColumn生成迁移文件 - 再运行
Update-Database把修改应用到数据库
要是嫌麻烦,直接删掉现有的SQLite数据库文件,让EF Core重新生成一个新的也可以。
- 在Package Manager Console里运行
插入数据时别手动赋值
确保你添加实体的时候,不要给No属性设置值(比如别写turno.No = 0;),让EF Core或者数据库自己处理这个值的生成。
这样调整之后,再插入数据,No列应该就能正常自增了。
内容的提问来源于stack exchange,提问作者Zubair Rana




