首页 > 其他分享 >EFCore 实体的配置FluentAPI(3)

EFCore 实体的配置FluentAPI(3)

时间:2023-12-15 18:13:14浏览次数:33  
标签:配置 Name builder 实体 EFCore FluentAPI Property 主键 属性

上一篇文章简述了如何使用EFCore 的CodeFirst进行数据库创建并实现简单的增删改查,这章我们讨论一些复杂的配置:实体配置

实体配置目的:生成想要的表格类型,如表名,表的列名,表字段类型,长度等,下图是上一章EFCore生成的表

 

实体配置遵循约定大于配置的原则:就是说EFCore这个ORM框架已经给我们约定好了,主要有如下规则:

1)表名采用DBContext中的对用的DbSet的属性名
2)数据表列的名字采用实体类属性的名字,列的数据类型采用和实体类属性类型最兼容的类型
3)列的可空性取决于对应实体类属性的可空性,如string类型可空,double类型不可空
4)名字为Id的属性为主键,如果主键为short,int或者long类型,则默认采用自增字段,如果主键为Guid类型,则采用默认的Guid生成机制生成主键值

 

 

但有时我们需要不同的自定义配置,那就需要使用其它方式,EFCore提供两种方式进行实体配置

1、FluentAPI:把配置写到独立的配置类中(即继承于IEntityTypeConfiguration<T>的类)builder.ToTable("T_Books"),或者写到DbContext的OnModerCreating方法中(不推荐)

     缺点:复杂;优点:解耦

2、Data Annotation(不推荐使用):把配置以特性(Annotation)的形式标注在实体类中

       优点:简单;缺点:耦合

这章主要讲解FluentAPI

FlunentApI的一些功能:


//设置自定义表名
builder.ToTable("T_Students");
//配置数据库列名
builder.Property(x => x.Name).HasColumnName("Student_Name");
//配置主键
builder.HasKey(x=>x.Id);
//配置组合主键
builder.HasKey(x=>new {x.Id,x.Name });
//配置属性为必须项
builder.Property(x=>x.Name).IsRequired();
//配置忽略属性
builder.Ignore("Num");
//配置数据库列的数据类型
builder.Property(x => x.Name).HasColumnType("varchar");
//配置属性的最大长度
builder.Property(x => x.Name).HasMaxLength(30);
//配置属性的默认值
builder.Property(x => x.Age).HasDefaultValue(20);

 

 public class StudentConfig : IEntityTypeConfiguration<Student>
 {
     public void Configure(EntityTypeBuilder<Student> builder)
     {
         //设置自定义表名
         builder.ToTable("T_Students");
         //配置数据库列名
         builder.Property(x => x.Name).HasColumnName("Student_Name");
         //配置主键
         builder.HasKey(x=>x.Id);
         //配置组合主键
         builder.HasKey(x=>new {x.Id,x.Name });
         //配置属性为必须项
         builder.Property(x=>x.Name).IsRequired();
         //配置忽略属性
         builder.Ignore("Num");
         //配置数据库列的数据类型
         builder.Property(x => x.Name).HasColumnType("varchar");
         //配置属性的最大长度
         builder.Property(x => x.Name).HasMaxLength(30);
         //配置属性的默认值
         builder.Property(x => x.Age).HasDefaultValue(20);
        

     }
 }

执行迁移后生成的数据库表格如下:

 

建议每个实体都写一个对应的配置类进行配置,而不是在DBContext中的OnModelCreating方法中配置

关于更多FluentAPI,可查看微软官方文档

 

标签:配置,Name,builder,实体,EFCore,FluentAPI,Property,主键,属性
From: https://www.cnblogs.com/luohualiushui1173/p/17903818.html

相关文章

  • EFCore CodeFirst(2)
    目的:使用EFCore的CodeFirst实现简单的增删改查,只注重流程搭建,不涉及到比较复杂的配置和应用等Nuget包安装:Micosoft.EntityFrameworkCore:EFCore基础包Micosoft.EntityFrameworkCore.SqlServer:该系列文章使用SQLServer数据库,因此需要引用这个包,如果是其它数据库,查找对应的包安......
  • EFCore 简介(1)
    EFCore是微软的一个ORM框架,全称:Microsoft.EntityFrameworkCoreORM(ObjectRelationalMapping):对象关系映射,让开发者用对象的形式操作关系数据库常用的ORM框架:EF、EFCore、Dapper、SqlSugar、Freesql每种ORM都有自己的优缺点EFCore有两种模式:DBFirst(数据库优先)和CodeFirst(代码优......
  • 实体类生成resultMap工具类
    将实体类转为resultMap实体类:importlombok.Data;importjava.sql.Timestamp;importjava.util.Date;@DatapublicclassTestVo{privateStringmetric;privateintvalue;privateTimestamptimeStamp;privateStringvalueType;privateStri......
  • Springboot+FastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包
    场景若依前后端分离版手把手教你本地搭建环境并运行项目:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662在上面搭建SpringBoot项目的基础上,并且在项目中引入fastjson、hutool、lombok等所需依赖后。系统需要对接第三方http接口获取返回的数据,并将json数......
  • HTML学习笔记七:html-字符实体和全局属性
    HTML学习笔记七:html-字符实体和全局属性MDN元素查询地址所有的html的元素我们都可以通过以下地址进行相关的查询和理解。https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/meta字符实体用特定代码来表示一个符号,即为字符实体。字符实体格式:以&开头以;结尾......
  • 实体类(多层嵌套)生成FastReport需要的frd字典文件
    #region根据模型生成FastReport需要的Frd字典文件///<summary>///生成frd文件内容///</summary>privatestaticStringBuilderstringTouBu=newStringBuilder();///<summary>///根据模型生成FastReport需要的F......
  • CAXA 3D实体设计2023:高效的三维CAD设计软件
    CAXA3D实体设计2023是一款高效、功能强大的3DCAD设计软件,适用于各种行业和领域,如机械、电子、建筑等。通过该软件,用户可以轻松创建和编辑各种3D模型,实现从产品设计、制造到维护的全流程管理。点击获取CAXA3DCAXA3D实体设计2023拥有丰富的设计功能和工具,包括草图绘制、实体......
  • 统一接口返回结果实体
    REST接口封装统一返回数据工具类如下(记录):publicclassResult{/***响应状态码*/privateIntegercode;/***响应成功与否*/privatebooleansuccess;/***响应消息*/privateStringmsg;/***......
  • 12月摸鱼计划,挑战7/14/21天发博文,实体礼品包邮送!
    春去秋来冬又至,今年的最后一期摸鱼计划也来啦!为迎接新一年的来到,本次摸鱼计划礼品新增了2024年版记事本台历,既是台历,又是笔记本。还有全新礼品——元气多巴胺背包,支持博主们写更多的好文章!【活动时间】发文时间:2023年12月1日—2023年12月31日【活动任务】以下任务福利可同享!!任务一:7......
  • .net core 6 由数据库生成对应实体类
    首先按照网上其他朋友的教程,安装对应程序包 然后在程序包管理器控制台中执行Scaffold-DbContext,总是报错,各种各样的错误,说未引用的程序包之类的。最后找到的解决办法是,在vs的菜单栏中找到视图--终端,然后在下方弹出的“开发者PowerShell”中输入命令 dotnetefdbcontexts......