• EF Core02


    EF Core约定大于配置:

    1.表名采用DbContext中对应的DBSet<T>属性的 属性名

      例如:public DbSet<Student> Students { get; set; } 若不单独对表名进行设定则默认为表名=Students 

    2.数据库的列名与实体类属性名一致,列的类型采用和实体属于最兼容的类型   

        例如: SqlServer中: int = int (C#中)  bigint = long(C#中)

    3.数据库表列可空取决于实体类属性是否可空。    例如  public string? Address { get; set; }  则Address 可为空

    4.名字为ID的属性作为主键,如果主键为Short/int/long类型,则默认采用自增字段。如果为GUID则默认采用Guid生成主键

     

    实体类与数据库列的两种配置方式:

    第一种:System.ComponentModel.DataAnnotations

        [Table("ZuStudent")]
        internal class Student
        {
            public long Id { get; set; }
    [Required] [MaxLength(
    60)] public string Name { get; set; } public int Age { get; set; } [Column("Loaction")] public string? Address { get; set; } /// <summary> /// 0:女 1:男 /// </summary>
         [NotMapped] //不对应到表,表中不生成该字段
    public int Gender { get; set; } public override string ToString() { var gender= Gender == 0?"": ""; return $"My Name is {Name},I'm a {gender},{Age} Years Old , Live in {Address} "; } }

    第二种(推荐):FluentAPI 创建一个类单独进行配置,降低耦合

        internal class StudentConfig : IEntityTypeConfiguration<Student>
        {
            public void Configure(EntityTypeBuilder<Student> builder)
            {
                builder.ToTable("ZuStudent");//设置表名,不写默认为类名
    
                //系统自动把ID设置为主键了,所以不需要了
                //builder.HasKey(t => t.Id); //设置主键
                //builder.Property(x => x.Id).ValueGeneratedNever(); //设置自增
    
                builder.Property(s => s.Name).HasMaxLength(60); //设置Name字段在数据库的长度 
                builder.Ignore(s=>s.Gender);  //不对应到表,表中不生成该字段
           

            builder.HasIndex(s=>s.Address).IsUnique();//唯一索引
            builder.HasIndex(s => new {s.Name,s.Age });//复合索引


    //一般不建议这样设置 builder.Property(s => s.Address).HasColumnName("Loaction");//设置Address属性 对应数据库的字段Location // } }

    EF Core主键:

    1.自增ID 

       优点:简单、适合创建索引,方便查询 

       缺点:分布式数据库中数据整合不方便,并发性能差

    2.Guid 

       优点:简单、高并发。适用于分布式 

       缺点:占用空间,不适合设置为索引 

    总结:

      SQLServer等数据库中不要把Guid主键设置为聚集索引,在MySql中,插入频繁的表不要用Guid作为主键

    其他方案:

    1.混合自增和Guid主键,自增作为物理主键,而Guid作为逻辑主键。

    自增ID作为表的主键,而业务查询数据把当做主键使用

    2.Hi/Lo算法

                

  • 相关阅读:
    开不了的窗_____window.open
    IIS项目发布完整流程
    理解MVC模式
    ASP.NET MVC 基础(01)
    C#之线程和并发
    vue时间格式化
    windows 2013 datacenter 安装sql server2008 r2兼容性
    SQL Server DBA十大必备工具使生活轻松
    ORACLE主要的系统表和系统视图
    Oracle中spool命令实现的两种方法比较
  • 原文地址:https://www.cnblogs.com/Zingu/p/15846869.html
Copyright © 2020-2023  润新知