zoukankan      html  css  js  c++  java
  • 9. EF Core数据库索引与备用键约束

    一、设置索引

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

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

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

    class MyContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> Posts { get; set; }
    
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Post>()
                .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<Post> 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<Car>()
      .HasAlternateKey(c
    => c.LicensePlate) //单个属性备用键
    .HasName("AlternateKey_LicensePlate"); //设置备用键名
        modelBuilder.Entity<Car>() .HasAlternateKey(c => new { c.State, c.LicensePlate }); //设置复合备用键
    }
    注:按照约定,备用键的索引和约束被命名为 AK_<type name>_<property name> 格式, 备用组合键 <property name> 为下划线分隔属性名称的列表
  • 相关阅读:
    20210108 android学习
    20210106 android学习
    20210105 android学习
    20210104 android学习
    httpClient请求转发个人理解
    CefSharp如何判断页面是否加载完
    C#/WPF 使用的Task线程程序缺依旧响应缓慢问题
    修改LiveChart的提示显示位置
    Wpf双击放大缩小界面
    WPF设置无边框CefSharp显示不出来问题
  • 原文地址:https://www.cnblogs.com/Adoni/p/12305931.html
Copyright © 2011-2022 走看看