• 键(主键)
    • 惯例
    • 数据注解
    • 流式 API

    键(主键)

    键被作为每个实体实例主要唯一标识。当使用的是关系数据库时,键被映射为主键这个概念。你还可以将唯一标识配置为非主键(详见 替代键(备用关键字))。

    惯例

    按照惯例,名为 Id 或者 <当前类型名称>Id 的属性都将被配置为实体的键。

    1. class Car
    2. {
    3. public string Id { get; set; }
    4. public string Make { get; set; }
    5. public string Model { get; set; }
    6. }
    1. class Car
    2. {
    3. public string CarId { get; set; }
    4. public string Make { get; set; }
    5. public string Model { get; set; }
    6. }

    数据注解

    可以使用数据注解将单一属性配置为实体的键。

    1. class Car
    2. {
    3. [Key]
    4. public string LicensePlate { get; set; }
    5. public string Make { get; set; }
    6. public string Model { get; set; }
    7. }

    流式 API

    可以使用流式 API 将单一属性配置为实体的键。

    1. class MyContext : DbContext
    2. {
    3. public DbSet<Car> Cars { get; set; }
    4. protected override void OnModelCreating(ModelBuilder modelBuilder)
    5. {
    6. modelBuilder.Entity<Car>()
    7. .HasKey(c => c.LicensePlate);
    8. }
    9. }
    10. class Car
    11. {
    12. public string LicensePlate { get; set; }
    13. public string Make { get; set; }
    14. public string Model { get; set; }
    15. }

    还可以使用流式 API 将多个属性配置为实体的键(通常被称为组合件)。组合件只能通过流式 API 来配置 - 惯例不会设置组合件,数据注解也无法配置组合键。

    1. class MyContext : DbContext
    2. {
    3. public DbSet<Car> Cars { get; set; }
    4. protected override void OnModelCreating(ModelBuilder modelBuilder)
    5. {
    6. modelBuilder.Entity<Car>()
    7. .HasKey(c => new { c.State, c.LicensePlate });
    8. }
    9. }
    10. class Car
    11. {
    12. public string State { get; set; }
    13. public string LicensePlate { get; set; }
    14. public string Make { get; set; }
    15. public string Model { get; set; }
    16. }