Я использую 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 'UserSettings' when IDENTITY_INSERT is set to OFF.
что не так?