EF Core Fluent API PK без автоинкремента - PullRequest
0 голосов
/ 10 июня 2019

Я использую EF Core и не хочу иметь автоинкремент PK. Я использую Fluent API. Мой код:

public class UserSetting
{
    public int UserId { get; set; }
    public string TemplateName { get; set; }
    public string PrimaryColor { get; set; }
    public string SecondaryColor { get; set; }
    public string TextColor { get; set; }
    public string BackgroundColor { get; set; }
    public string ShadeColor { get; set; }
}

public class UserSettingMap : IEntityTypeConfiguration<UserSetting>
{
    public void Configure(EntityTypeBuilder<UserSetting> builder)
    {
        builder.HasKey(p => p.UserId);
        builder.Property(c => c.UserId)
            .ValueGeneratedNever()
            .HasAnnotation("DatabaseGenerated", DatabaseGeneratedOption.None);
    }
}

Но у Migration очень интересный код:

public partial class UserSettingPKNonAutoincrement : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AlterColumn<int>(
            name: "UserId",
            table: "UserSettings",
            nullable: false,
            oldClrType: typeof(int))
            .OldAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AlterColumn<int>(
            name: "UserId",
            table: "UserSettings",
            nullable: false,
            oldClrType: typeof(int))
            .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
    }
}

Итак, OldAnnotation и Annotation - это одно и то же. Почему так?

После выполнения миграции я вижу свойство автоинкремента для UserId и, конечно, запись не может быть добавлена ​​с моим значением UserId:

SqlException: Cannot insert explicit value for identity column in table &#x27;UserSettings&#x27; when IDENTITY_INSERT is set to OFF.

что не так?

...