如何使用EF核心在SQLite中创建Autoincrement列?

Zub*_*ana 13 c# sqlite auto-increment entity-framework-core .net-standard-2.0

我首先在我的UWP和.NET Standard应用程序中使用Entity Framework Core 2.0 for Sqlite代码.我的模型有一个主键整数类型的实体,根据SQLite文档应该作为自动增量.但实际上,Identity列的每一行都将0作为值.请帮助,因为我找不到与此问题相关的帮助材料.

这是我的财产,没有任何数据注释.

public Int32 No { get; set; }

我使用了流畅的API

modelBuilder.Entity<TurnosGeneral>()
            .HasKey(c => new { c.No, c.Cod_Turno });
Run Code Online (Sandbox Code Playgroud)

并在此处插入值

db.TurnosGenerals.Add(new TurnosGeneral { Cod_Turno = numeroTurnoTextBlock.Text });
Run Code Online (Sandbox Code Playgroud)

db.SaveChanges();

插入的每一行c.No为0.

Iva*_*oev 17

我的模型有一个主键整数类型的实体,应该作为自动增量

问题是所讨论的属性不是 PK,而是复合 PK 的一部分,在这种情况下,它不被视为按惯例自动生成,如EF Core文档的Generated Values Conventions部分所述:

按照惯例,short,int,long或Guid类型的非复合主键将被设置为在add时生成值.将设置所有其他属性而不生成任何值.

您需要明确指定:

modelBuilder.Entity<TurnosGeneral>()
    .Property(e => e.No)
    .ValueGeneratedOnAdd();
Run Code Online (Sandbox Code Playgroud)

更新:以上是适用于大多数数据库的一般方法.但SQLite 仅对INTEGER PRIMARY KEY类型的列支持AutoIncrement ,因此这不是EF Core限制.要么不使用自动增量,要么使其成为非复合PK.