You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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,数据库也不会主动覆盖这个值。

  • 更新数据库结构
    如果你的数据库已经创建过了,光改配置没用,得更新表结构:

    1. 在Package Manager Console里运行Add-Migration FixIdentityColumn生成迁移文件
    2. 再运行Update-Database把修改应用到数据库
      要是嫌麻烦,直接删掉现有的SQLite数据库文件,让EF Core重新生成一个新的也可以。
  • 插入数据时别手动赋值
    确保你添加实体的时候,不要给No属性设置值(比如别写turno.No = 0;),让EF Core或者数据库自己处理这个值的生成。

这样调整之后,再插入数据,No列应该就能正常自增了。

内容的提问来源于stack exchange,提问作者Zubair Rana

火山引擎 最新活动