C# 如何使用EF核心将单个主键更改为复合主键

C# 如何使用EF核心将单个主键更改为复合主键,c#,.net,entity-framework,.net-core,entity-framework-core,C#,.net,Entity Framework,.net Core,Entity Framework Core,我想删除已创建且不包含数据的SQL表中的单个主键Id列,并改为定义复合主键 我当前的实体定义如下: [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public long IpFrom { get; set; } public long IpTo { get; set; } ... 我想更新一下: [Key, Column(Order = 0)] public l

我想删除已创建且不包含数据的SQL表中的单个主键Id列,并改为定义复合主键

我当前的实体定义如下:

[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; }
...
我已经使用fluent api做出了以下定义:

protected override void OnModelCreating(ModelBuilder builder)
{
   base.OnModelCreating(builder);

   builder.Entity<IPv4LocationEntity>()
     .HasKey(b => new {b.IpFrom, b.IpTo})
     .HasName("PK_TableName");
}

感谢您的帮助。

我尝试了此操作,但运行
dotnet ef数据库更新时
不会应用迁移

而是从迁移中生成SQL文件并执行SQL查询。试着这样做

cd ToYourDbModelProject
dotnet ef  --startup-project ../PathToStartupProject/ migrations script previous_migration current_migration -o current_migration.sql --context Namespace.To.Your.DbContext

你查过你的数据库了吗?“TableName”真的有“Id”列吗?@Dmitry是有生成迁移脚本()而不将它们应用于DB,并检查这些脚本。@Dmitry当我运行此命令时
dotnet ef migrations脚本
它会引发如下错误
无法加载文件或程序集“netstandard,Version=2.1.0.0,Culture=neutral,PublicKeyToken=CC7B13FFCD2DD51”。定位的程序集清单定义与程序集引用不匹配。(HRESULT的例外:0x8013100)
ALTER TABLE DROP COLUMN failed because column 'Id' does not exist in table 'TableName'.
cd ToYourDbModelProject
dotnet ef  --startup-project ../PathToStartupProject/ migrations script previous_migration current_migration -o current_migration.sql --context Namespace.To.Your.DbContext