提问者:小点点

ASP.NET核心API:生成GUID/UUID类型的主键到MySql数据库


我正在使用ASP.NET核心创建代码优先的WebAPI。 我想定义一个UUID/GUID Pk类型为BINARY(16)的表,这个表最好是自动生成的,类似于auto_increment,在auto_increment中插入列的其余部分,Db自动填充Pk/id。

我曾尝试在Db生成之后为字段创建一个触发器,以用UUID填充Pk,但它不允许我使用UUID()。

无论如何,下面是我要填充的表的示例:dbcontext.cs

ModelBuilder.Entity<Customers>(entity =>
        {
            entity.HasKey(e => e.CustomerId)
                .HasName("PRIMARY");

            entity.ToTable("customers");

            entity.HasIndex(e => e.CustomerId)
                .HasName("customer_id_UNIQUE")
                .IsUnique();

            entity.Property(e => e.CustomerId)
                .HasColumnName("customer_id")
                .HasColumnType("BINARY(16)");
}

使用pomelo.EntityFrameworkCore.MySQL(如果有什么不同的话)。

我知道。NET中有一个GUID()函数,但我不知道如何让MySql自动生成它。 我试着想出了许多解决方案,但没有结果,我试着使用存储过程,ValueGenerator等。

请提供任何建议,代码或指针,你可能知道,因为这是非常令人沮丧的我,因为我会说我是一个初学者。

非常感谢!


共2个答案

匿名用户

向列添加DataAnnotations

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid CustomerId { get; set; }

在迁移过程中,应更改CreateTable以将defaultValueSQL属性添加到列中:

CustomerId = c.Guid(nullable: false, identity: true, defaultValueSql: "NEWID()")

或fluent API:

entity.Property(x => x.CustomerId).HasDefaultValueSql("NEWID()");

我希望这能帮到你。

匿名用户

ModelBuilder.Entity<Customers>(entity =>
        {
            entity.HasKey(e => e.CustomerId)
                .HasName("PRIMARY")
                .HasComputedColumnSql("SELECT UUID()");

            entity.ToTable("customers");

            entity.HasIndex(e => e.CustomerId)
                .HasName("customer_id_UNIQUE")
                .IsUnique();

            entity.Property(e => e.CustomerId)
                .HasColumnName("customer_id")
                .HasColumnType("BINARY(16)");
        }