EF Core 模型优先——根据类对象创建数据表

news2024/11/27 21:45:30

需要的nuget包

  •   Microsoft.EntityframeworkCore.SqlServer  (根据自己的数据库类型选择对应的nuget包)
  •   Microsoft.EntityframeworkCore.Tools
  •   Microsoft.VisualStudio.Web.CodeGeneration.Design

说明:

(1)本文测试使用的数据库是SqlServer2017; 

(2)如果没有Microsoft.EntityFrameworkCore.Design,在PM上执行命令会失败(如下图)
PM> add-migration initicial
Build started...
Build succeeded.
Your startup project 'CoreDemo' doesn't reference Microsoft.EntityFrameworkCore.Design. This package is required for the Entity Framework Core Tools to work. Ensure your startup project is correct, install the package, and try again.

两个类:Grade(年级)、Student(学生)

一个枚举:Gender(性别)

    /// <summary>
    /// 性别枚举  
    /// </summary>
    public enum Gender
    {
        //一定要写上枚举对应的数字值 
         
        男 = 1,
        女 = 2,
    }


    /// <summary>
    /// 年级实体类
    /// </summary>
    public class Grade
    {
        /// <summary>
        /// 年级Id是主键
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// 年级名称
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 年级里的学生
        /// </summary>
        public List<Student> Students { get; set; } = new List<Student>();
    
    }

    /// <summary>
    /// 学生实体类
    /// </summary>
    public class Student
    {
        /// <summary>
        /// 学生编号
        /// </summary> 
        public int Id { get; set; }

        /// <summary>
        /// 学生姓名
        /// </summary> 
        public string Name { get; set; }

        /// <summary>
        /// 性别
        /// </summary>
        public Gender Gender { get; set; }

        /// <summary>
        /// 所在年级编号
        /// </summary> 
        public int GradeId { get; set; }

        /// <summary>
        /// 所在年级
        /// </summary>
        public Grade Grade { get; set; }
 
        /// <summary>
        /// 默认联系电话
        /// </summary> 
        public string? Tele { get; set; }

        /// <summary>
        /// 联系电话2
        /// </summary> 
        public string? Tele2 { get; set; }

    }

关系

  1. 一个年级有多个学生,一个学生只能属于一个年级
  2. 每个学生都必须录入性别信息


        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        { 
            //数据库连接字符串
            string connStr = "Data Source=127.0.0.1;Initial Catalog=EFDemoTestDB;User ID=sa;Password=123456;TrustServerCertificate=true";
             
            optionsBuilder.UseSqlServer(connStr);

            //设置输出EF Core背后执行的SQL语句到控制台
            optionsBuilder.LogTo(Console.WriteLine);
            base.OnConfiguring(optionsBuilder); 
        }


        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {

            //设置Grade对应的数据表
            modelBuilder.Entity<Grade>(x => {

                x.ToTable("T_Grade"); //设置表名称
                x.HasKey(x => x.Id); //设置主键
                x.Property(c => c.Name).HasColumnType("nvarchar(10)").IsRequired();//设置字段类型 
            });

            //设置Student对应的数据表
            modelBuilder.Entity<Student>(x => {

                x.ToTable("T_Student");
                x.HasKey(c => c.Id);
                x.Property(c => c.Name).HasMaxLength(10).IsRequired().IsUnicode();

                //设置Tele Tele2字段是varchar(11) null 类型
                x.Property(c => c.Tele).HasMaxLength(11).IsRequired().IsUnicode(false).IsRequired(false);
                x.Property(c=>c.Tele2).HasMaxLength(11).IsRequired().IsUnicode(false).IsRequired(false);

                //设置Gender列
                x.Property(c => c.Gender)
                .HasConversion(c => (int)c, y => (Gender)Enum.ToObject(typeof(Gender), y))//Gender列存储Enum对应的int值
                .IsRequired();//Gender列不能为空


                //设置GradeId字段是外键 Grade与Student是一对多关系
                x.HasOne<Grade>(c => c.Grade).WithMany(y => y.Students).HasForeignKey(z => z.GradeId); 
            }); 

            base.OnModelCreating(modelBuilder);
        }

生成数据表

        主要执行的语句:

  • PM> add-migration initicial 
  • PM> update-database 
PM> add-migration initicial
Build started...
Build succeeded.
To undo this action, use Remove-Migration.

PM> update-database
Build started...
Build succeeded.
Done.

查看生成的对应数据库表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1450711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】C++11上

C11上 1.C11简介2.统一的列表初始化2.1 {} 初始化2.2 initializer_list 3.变量类型推导3.1auto3.2decltype3.3nullptr 4.范围for循环5.final与override6.智能指针7. STL中一些变化8.右值引用和移动语义8.1左值引用和右值引用8.2左值引用与右值引用比较8.3右值引用使用场景和意义…

机器学习中的10种非线性降维技术对比总结

降维意味着我们在不丢失太多信息的情况下减少数据集中的特征数量&#xff0c;降维算法属于无监督学习的范畴&#xff0c;用未标记的数据训练算法。 尽管降维方法种类繁多&#xff0c;但它们都可以归为两大类:线性和非线性。 线性方法将数据从高维空间线性投影到低维空间(因此…

排序算法---计数排序

原创不易&#xff0c;转载请注明出处。欢迎点赞收藏~ 计数排序&#xff08;Counting Sort&#xff09;是一种线性时间复杂度的排序算法&#xff0c;其核心思想是通过统计待排序元素的个数来确定元素的相对位置&#xff0c;从而实现排序。 具体的计数排序算法步骤如下&#xff…

【Go语言】Go项目工程管理

GO 项目工程管理&#xff08;Go Modules&#xff09; Go 1.11 版本开始&#xff0c;官方提供了 Go Modules 进行项目管理&#xff0c;Go 1.13开始&#xff0c;Go项目默认使用 Go Modules 进行项目管理。 使用 Go Modules的好处是不再需要依赖 GOPATH&#xff0c;可以在任意位…

[leetcode刷题] 组合

对于递归回溯我觉得是需要多写多分析&#xff0c;递归三部曲&#xff1a;1.返回值和参数&#xff1b;2.终止条件&#xff1b;3.单层递归逻辑 1.通常情况下返回值都是void&#xff0c;参数的话根据实际需求设计&#xff0c;如果设置了全局变量那输入参数就可以少写几个&#xf…

Elasticsearch:特定领域的生成式 AI - 预训练、微调和 RAG

作者&#xff1a;来自 Elastic Steve Dodson 有多种策略可以将特定领域的知识添加到大型语言模型 (LLM) 中&#xff0c;并且作为积极研究领域的一部分&#xff0c;正在研究更多方法。 对特定领域数据集进行预训练和微调等方法使 LLMs 能够推理并生成特定领域语言。 然而&#…

009集——磁盘详解——电脑数据如何存储在磁盘

很多人也知道数据能够保存是由于设备中有一个叫做「硬盘」的组件存在&#xff0c;但也有很多人不知道硬盘是怎样储存这些数据的。这里给大家讲讲其中的原理。 首先我们要明白的是&#xff0c;计算机中只有0和1&#xff0c;那么我们存入硬盘的数据&#xff0c;实际上也就是一堆0…

猫头虎分享已解决Bug ‍ || Go Error: no Go files in /path/to/directory

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

JVM(5)面试篇

1 什么是JVM&#xff1f; 关联课程内容 基础篇-初识JVM基础篇-Java虚拟机的组成 回答路径 JVM的定义作用功能组成 1、定义&#xff1a; JVM 指的是Java虚拟机&#xff08; Java Virtual Machine &#xff09;。JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是…

猫头虎分享已解决Bug ‍ || Python Error: IndentationError: expected an indented block

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

Ollama 可以在 Windows 上运行了

Ollama 可以在 Windows 上运行了 0. 引言1. 下载 Ollma 安装文件2. 安装 Ollama3. 使用 Ollama 0. 引言 Ollama 终于可以在 Windows 上运行了&#xff0c;一直以来都是 “Coming soon”。 运行 Mixtral 8*7B 试了一下&#xff0c;推理速度和推理效果都很不错。 而且模型的下…

【mysql】数据约束

一、数据约束&#xff1a; 什么是约束&#xff1f; 为了确保表中的数据的完整性(准确性、正确性)&#xff0c;为表添加一些限制。是数据库中表设计的一个最基本规则。使用约束可以使数据更加准确&#xff0c;从而减少冗余数据&#xff08;脏数据&#xff09;。 数据库完整性约…

PowerShell搭建vue起始项目

Windows PowerShell搭建vue起始项目 搜索PowerShell,以管理员身份运行。 复制文件夹路径 cd 到这个文件夹位置 命令行创建项目&#xff1a;vue create 项目名 这里写自己的项目名就行&#xff0c;我写的yeb vue create yeb 创建成功后是这样的 有颜色的就是选中的&#xff…

【区块链技术开发语言】在ubuntu18 系统环境下命令操作安装GO语言开发环境

要在Ubuntu 18系统上安装GO语言开发环境,您可以按照以下步骤进行: 打开终端(Ctrl + Alt + T)。 使用以下命令下载GO语言安装包: 或者手动打开链接下载: wget https://golang.org/dl/go1.17.5.linux-amd64.tar.gz确保替换链接中的版本号为最新版本。 解压下载的安装包…

Stable Diffusion系列(五):原理剖析——从文字到图片的神奇魔法(扩散篇)

文章目录 DDPM论文整体原理前向扩散过程反向扩散过程模型训练过程模型生成过程概率分布视角参数模型设置论文结果分析 要想完成SD中从文字到图片的操作&#xff0c;必须要做到两步&#xff0c;第一步是理解文字输入包含的语义&#xff0c;第二步是利用语义引导图片的生成。下面…

计网体系结构

计算机网络的概述 概念 网络&#xff1a;网状类的东西或系统。 计算机网络&#xff1a;是一个将分散的、具有独立性功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。即计算机网络是互连(通过通信链路互连…

Recovering a Small String-Codeforces

题目链接&#xff1a;Problem - A - Codeforces 解题思路&#xff1a;分三种情况 第一个字母a,最后一个字母z 前两个字母a 最后两个字母z 其他根据大小算出剩下的字母 下面是c代码&#xff1a; #include<iostream> using namespace std; int main() {int t, n;cin…

投稿状态Editor evaluating revision

See: https://nejm.net/talk/2303 https://muchong.com/t-15298340-1-pid-11 https://muchong.com/t-15298340-1-pid-11 https://muchong.com/t-15312191-1

ESP32学习(3)——连接WIFI

1.简介 Wi-Fi是基于IEEE 802.11标准的无线网络技术 让联网设备以无线电波的形式&#xff0c;加入采用TCP/IP通信协议的网络. Wi-Fi设备有两种模式&#xff1a; 1.Access Point(AP) 模式&#xff0c;此为无线接入点&#xff0c;家里的光猫就是结合WiFi和internet路由功能的AP。…

车载诊断协议DoIP系列 —— 车辆以太网节点需求汇总

车载诊断协议DoIP系列 —— 车辆以太网节点需求汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,…