键充当每个实体实例的唯一标识符。 EF 中的大多数实体都有一个键,此键映射到关系数据库中主键的概念(对于没有键的实体,请参阅无键实体)。
按照约定,将名为 Id 或 <type name>Id 的属性配置为实体的主键。
例如下面的
class Car
{
public string Id { get; set; }
public string Make { get; set; }
public string Model { get; set; }
}
class Truck
{
public string TruckId { get; set; }
public string Make { get; set; }
public string Model { get; set; }
}Code language: JavaScript (javascript)
可以将单个属性配置为实体的主键,如下所示:
class Car
{
[Key]
public string LicensePlate { get; set; }
public string Make { get; set; }
public string Model { get; set; }
}Code language: JavaScript (javascript)
或者
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Car>()
.HasKey(c => c.LicensePlate);
}Code language: JavaScript (javascript)
你还可以将多个属性配置为实体的键,这称为组合键。 复合密钥只能使用熟知的 API 进行配置;约定将永远不会设置组合键,你不能使用数据批注来配置它。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Car>()
.HasKey(c => new { c.State, c.LicensePlate });
}Code language: JavaScript (javascript)
主键名称
按照约定,使用名称 PK_<type name>创建关系数据库主键。 可以按如下所示配置 primary key 约束的名称:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.HasKey(b => b.BlogId)
.HasName("PrimaryKey_BlogId");
}Code language: JavaScript (javascript)