Я хочу удалить один столбец идентификатора первичного ключа в таблице SQL, которая уже создана и не содержит данных, и вместо этого определить составной первичный ключ.
Мое текущее определение сущности выглядит следующим образом :
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public long IpFrom { get; set; }
public long IpTo { get; set; }
...
И я хочу обновить это:
[Key, Column(Order = 0)]
public long IpFrom { get; set; }
[Key, Column(Order = 1)]
public long IpTo { get; set; }
...
Я уже сделал следующее определение, используя свободный API:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<IPv4LocationEntity>()
.HasKey(b => new {b.IpFrom, b.IpTo})
.HasName("PK_TableName");
}
Затем я использовал EF Tool для создания файлов миграции и получения следующего файла миграции.
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropPrimaryKey(
name: "PK_TableName",
table: "TableName");
migrationBuilder.DropColumn(
name: "Id",
table: "TableName");
migrationBuilder.AddPrimaryKey(
name: "PK_TableName",
table: "TableName",
columns: new[] { "IpFrom", "IpTo" });
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropPrimaryKey(
name: "PK_TableName",
table: "TableName");
migrationBuilder.AddColumn<int>(
name: "Id",
table: "TableName",
type: "int",
nullable: false,
defaultValue: 0)
.Annotation("SqlServer:Identity", "1, 1");
migrationBuilder.AddPrimaryKey(
name: "PK_TableName",
table: "TableName",
column: "Id");
}
}
Я получаю следующую ошибку, когда хочу обновить базу данных с помощью инструмента EF, хотя мне все кажется правильным:
ALTER TABLE DROP COLUMN failed because column 'Id' does not exist in table 'TableName'.
Спасибо за вашу помощь.