EFcore的实体类配置

1 约定配置

约定大于配置,框架默认了许多实体类配置的规则,在约定规则不满足要求时,可以显示地定义规则
1 数据库表明在不指定的情况下,默认使用的是数据库上下文类【DBContext】中DbSet 的属性名;
2 数据库表列的名字默认使用的是实体类属性的名字;列的数据类型采用与实体类属性类型相兼容的类型;
3 数据库列的可空性取决于对应实体属性的可空性;
4 实体类的属性为Id时,在数据库中对应的是主键,若属性类型为short、int、long类型时,则在数据库中默认是自增的

2 显示定义模型类配置规则

该文章使用的是MySQL的数据库,这里使用到了模型驱动开发的模式【现有实体类,后有数据库表。需要使用到迁移指令的使用,本篇文章的重点不是迁移指令的使用,所以忽略该内容】

2.1 Fluent API

使用框架定义的方法去配置模型类与数据库表的关系,通常在实现了IEntityTypeConfiguration《T》的Configure(EntityTypeBuilder builder)方法中去使用FluentAPI的方式去配置

   public  class Book
    {
        /// <summary>
        /// 书籍ID
        /// </summary>
        public long Id { get; set; }
        /// <summary>
        /// 标题
        /// </summary>
        public string? Title { get; set; }
        /// <summary>
        /// 发布时间
        /// </summary>
        public DateTime PublishTime { get; set; }
        /// <summary>
        /// 价格
        /// </summary>
        public double Price { get; set; }
        /// <summary>
        /// 作者名称
        /// </summary>
        public string ?AuthorName { get; set; }
        /// <summary>
        /// 描述
        /// </summary>
        public string Desc { get; set; }

    }
    internal class BookConfiguration : IEntityTypeConfiguration<Book>
    {
        public void Configure(EntityTypeBuilder<Book> builder)
        {
            //Book类对应数据库中的tb_book表
            builder.ToTable<Book>("t_books");

            //使用Fluent API的方式,显示地去配置类模型与数据库表的关系
            //HasColumnName指定数据库中列的名字
            builder.Property(e => e.Id).HasColumnName("id").IsRequired();
            //HasColumnType指定数据库中列的数据类型
            builder.Property(e => e.AuthorName).HasColumnType("varchar(100)").HasColumnName("author_name");
            //HasMaxLength 设定列的最大长度
            builder.Property(e => e.Title).HasColumnName("title").HasMaxLength(200);
            builder.Property(e => e.Price).HasColumnName("price");
            builder.Property(e => e.PublishTime).HasColumnName("publish_time");
            //实体类的属性默认全部会映射到数据库表中,可以使用Ignore去忽略制定的属性
            builder.Ignore(e=>e.Desc);

        }
    }

使用迁移指令后Update-database,将同步更新数据库中表信息。数据结构如下
在这里插入图片描述

2.2 Data Annotation

使用特性 【 A n n o t a t i o n 】 \textcolor{red}{【Annotation】} Annotation的方式去配置模型类与数据库表的映射关系

    
   //Table 指定表名称
 [Table("t_students")]
 internal class Student
 {
     public int Id { get; set; }

     //MaxLength 指定栏位长度 Required 指定列值必填
     [MaxLength(100)]
     [Required]
     public string Name { get; set; }

     public int  Age { get; set; }

 }

使用迁移指令后Update-database,将同步更新数据库中表信息。数据结构如下
在这里插入图片描述

2.3 如何选用自定义配置规则

Data Annotation 相较于使用FluentAPI的方式更为简洁,只需要使用特性标注即可,不需要单独的写配置类,不过FluentAPI更为强大,能够完全替代Data Annotation ,但是使用特性的方式则无法完全取代FluentAPI。微软官方默认推荐使用FluentAPI去配置模型类,不过两者是可以同时混用的,可以在Data Annotation无法实现的情况下使用FluentAPI去配置模型类。

相关推荐

  1. EFCore通用仓储

    2024-03-21 14:38:02       35 阅读
  2. 实体注解

    2024-03-21 14:38:02       27 阅读
  3. Springboot自定义实体读取nacos当中配置

    2024-03-21 14:38:02       55 阅读
  4. Spring Boot配置实例讲解

    2024-03-21 14:38:02       34 阅读
  5. 使用EFCore和Linq查询语句封装复杂查询结果

    2024-03-21 14:38:02       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-21 14:38:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-21 14:38:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-21 14:38:02       82 阅读
  4. Python语言-面向对象

    2024-03-21 14:38:02       91 阅读

热门阅读

  1. 机器学习流程—模型部署发布

    2024-03-21 14:38:02       42 阅读
  2. springboot + neo4j 功能使用

    2024-03-21 14:38:02       36 阅读
  3. 如何建设企业信息化管理体系?

    2024-03-21 14:38:02       32 阅读
  4. TC551001CPI

    2024-03-21 14:38:02       38 阅读
  5. Spring面试题

    2024-03-21 14:38:02       41 阅读
  6. vim | vim scp的使用

    2024-03-21 14:38:02       38 阅读
  7. 將mysql表創建到hive腳本

    2024-03-21 14:38:02       41 阅读
  8. MPI4.1文档4-MPI数据类型 MPI DataTypes

    2024-03-21 14:38:02       34 阅读
  9. 邦芒解析:职场中得不到理想薪水的八大原因

    2024-03-21 14:38:02       38 阅读