使用EFCore在MariaDB中生成自动增量int列

时间:2019-07-11 06:54:51

标签: c# .net-core entity-framework-core mariadb auto-increment

问题:

我正在尝试使用codefirst在.netcore 2.2中使用efcore创建一个表,该表具有从0开始的自动递增整数主键。我发现的所有解决方案都会导致添加迁移时出错或自动递增工作,但是从int.MinValue开始。

以下所有解决方案均已单独尝试,未结合使用:


解决方案1:

什么都不做。只需让efcore进行默认操作即可。

->列自动递增,但从int.MinValue开始


解决方案2:

在主键上设置注释"[DatabaseGenerated(DatabaseGeneratedOption.Identity)]"

->列自动递增,但从int.MinValue开始


解决方案3:

modelBuilder.Entity<User>()
    .Property(u => u.Id)
    .ValueGeneratedOnAdd();

->列自动递增,但从int.MinValue开始


解决方案4:

modelBuilder.HasSequence<int>("User_seq")
    .StartsAt(0)
    .IncrementsBy(1);

modelBuilder.Entity<User>()
    .Property(u => u.Id)
    .HasDefaultValueSql("NEXT VALUE FOR User_seq");

->添加迁移失败,并显示错误:

    "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SEQUENCE User_seq START WITH 0 INCREMENT BY 1' at line 1"




解决方案5:

将Id的数据类型更改为uint。

->列自动增加,但从int.MaxValue开始





我的用户实体:


    public class User
    {
        public int Id { get; set; }
        public string FirstName{ get; set; }
        public string LastName { get; set; }
    }




使用的提供程序:Pomelo.EntityFrameworkCore.MySql


为澄清我的问题:如何使用efcore代码优先在MariaDB中创建一个从0开始递增1的自动递增整数主键列?

1 个答案:

答案 0 :(得分:0)

你不能。

MariaDB(MySQL)将0视为创建新AUTO_INCREMENT值的含义。

不要假定AUTO_INCREMENT所没有提供的属性。只是说每个新值都将与现有值不同。

int.MinValue可能是一个很大的负值(-2 ^ 31)。