9. EF Core数据库索引与备用键约束

一、设置索引

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity().HasIndex(b => b.Url); //Url字段索引
modelBuilder.Entity() .HasIndex(b => b.Url) .IsUnique();
//Url字段的唯一索引
modelBuilder.Entity().HasIndex(b => b.Url).HasName("Index_Url"); //设置索引名为Index_Url
modelBuilder.Entity().HasIndex(b => b.Url).HasFilter("过滤条件"); //复合条件的数据建立索引 HasFilter里面填写 where 条件。HasFilter(null) 所有数据建立索引
modelBuilder.Entity() .HasIndex(p => new { p.FirstName, p.LastName }); //创建多个列的索引
 }

 

二、备用键:除主键之外,备用键也能唯一标识一条数据(跟主键一样具有唯一约束)。备用键可以用作外键关系的目标。当使用关系数据库时,系统通常会在需要时默认你引入备用键,你无需手动配置它们,当然也可以手动配置

1、约定设定:按照约定,当您标识的属性不是作为关系目标的主键时,将为您引入备用键

class MyContext : DbContext
{
    public DbSet Blogs { get; set; }
    public DbSet Posts { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity()
            .HasOne(p => p.Blog)
            .WithMany(b => b.Posts)
            .HasForeignKey(p => p.BlogUrl)
            .HasPrincipalKey(b => b.Url); //不需要设置Url为备用键,EF Core会设置
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public string BlogUrl { get; set; }
    public Blog Blog { get; set; }
}

2、手动设置:Fluent API 可用于手动配置要作为备用键的单个属性

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity()
  .HasAlternateKey(c
=> c.LicensePlate) //单个属性备用键
.HasName("AlternateKey_LicensePlate"); //设置备用键名
    modelBuilder.Entity() .HasAlternateKey(c => new { c.State, c.LicensePlate }); //设置复合备用键
}
注:按照约定,备用键的索引和约束被命名为 AK__ 格式, 备用组合键 为下划线分隔属性名称的列表

你可能感兴趣的:(9. EF Core数据库索引与备用键约束)