ASP.net Core EntityFramework Code EF code 汇总

Entity FrameWork EF 总结

EF Core

EF Core 如果实体模型很多,全部放在 上下文中的 OnModelCreating(ModelBuilder modelBuilder) 不太好维护

可以把实体模型 分离出去,每个类创建一个实体模型

public class BookConfiguration :IEntityTypeConfiguration<Account>
{
	public void Configure(EntityTypeBuilder<Book> builder)
	{
	   //  把之前上下文中的  OnModelCreating(ModelBuilder modelBuilder) 
	   // 对应Account 的数据模型  复制到此处  即可
		builder.ToAble("Book")
	}
}

》》》原来的上下文中 替换成如下

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{
	modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
}

EF Core 环境搭建

public class Book
{
    //必须是属性
    public long Id { get; set; }//主键
    public string Title { get; set; }//标题
    public DateTime PubTime { get; set; }//发布日期
    public double Price { get; set; }//单价
    public string AuthorName { get; set; }//作者名字
}
IEnityTypeConfiguration 配置类
class BookEntityConfig : IEntityTypeConfiguration<Book>  //指定是对那个类进行配置
{
    public void Configure(EntityTypeBuilder<Book> builder) //实现接口
    {
    	//  Fluent API
        builder.ToTable("T_Books"); //实体对象在数据库中表的名字是“T_Books”
        //没有详细设置每个属性在数据库中的列明和数据类型
        //会默认吧属性名字作为列明,并根据属性类型来推断数据库中的数据类型
        
        //可以根据需要修改实体类的配置,进而修改数据库的表
        //HasMaxLength(50):最大长度为50 IsRequired():不可为空
        builder.Property(e => e.Title).HasMaxLength(50).IsRequired();
        builder.Property(e => e.AuthorName).HasMaxLength(20).IsRequired();
    }
}

上下文

using Microsoft.EntityFrameworkCore;
class TestDbContext : DbContext
{
    public DbSet<Book> Books { get; set; } //可对上文的Book实体进行操作
    //配置数据库的连接
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSql("链接字符串或者取配置文件");
        optionsBuilder.LogTo(Console.WriteLine);
    }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        //设置需要加载的程序集
        //加载当前程序集中所有实现了IEntityTypeConfiguration接口的类
        modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
    }
}

migration

到此,EF Core的环境搭建完成,总结一下,目前还没有数据库只是定义了实体对象, EF Core会根据我们定义的实体对象自动生成数据库,这种操作也被称之为迁移(migration)

目前只是实体对象创建完成,但是还没有在数据库中生成相应的表。
安装Nuget包Microsoft.EntityFrameworkCore.Tools。
在程序包管理器控制台中执行
Add-Migration 自定义名称,
这个一个迁移命令,建议名称是有意义的。

会自动在项目下生成Migrations文件夹,文件夹下生成相应的代码,其中名称为日期ID号_自定义名称的类,
其主要功能是创建数据库。

以上只是创建了生成数据库的类,但并没有执行。
在程序包管理器控制台中使用
Update-database
执行数据库迁移代码。

如果此时修改了BookEntityConfig中属性设置,需要再次执行一次{修改一次,就需要做一次迁移和Update-database}
Add-Migration 自定义名称,此时名称要和之前的不一样。
再次执行Update-database

预定大于配置

在这里插入图片描述

Data Annotation 数据注解

使用.net提供的Attribute对实体类、属性进行标注,来实现实体类的配置。

[Table("T_Books")] //将数据库表名设置为T_Books
public class Book
{
    public long Id { get; set; }//主键
	//将Title属性最大长度设置为50,且不能为空
    [MaxLength(50)] 
    [Required]
    public string Title { get; set; }//标题
    public DateTime PubTime { get; set; }//发布日期
    public double Price { get; set; }//单价
    [MaxLength(20)]
    [Required]
    public string AuthorName { get; set; }//作者名字
}

Fluent API

编写实现了IEntityTypeConfiguration接口的实体配置类

class BookEntityConfig : IEntityTypeConfiguration<Book>  //指定是对那个类进行配置
{
    public void Configure(EntityTypeBuilder<Book> builder) //实现接口
    {
    	//  Fluent API
        builder.ToTable("T_Books"); //实体对象在数据库中表的名字是“T_Books”
        //没有详细设置每个属性在数据库中的列明和数据类型
        //会默认吧属性名字作为列明,并根据属性类型来推断数据库中的数据类型
        
        //可以根据需要修改实体类的配置,进而修改数据库的表
        //HasMaxLength(50):最大长度为50 IsRequired():不可为空
        builder.Property(e => e.Title).HasMaxLength(50).IsRequired();
        builder.Property(e => e.AuthorName).HasMaxLength(20).IsRequired();
    }
}

关系配置

资料
》》》文章Article和评论Article的关系就是一对多

public class Article
{
	public long Id { get; set; }//主键
	public string Title { get; set; }//标题
	public string Content { get; set; }//内容
	public List<Comment> Comments { get; set; } = new List<Comment>(); //此文章的若干条评论
}

public class Comment
{
	public long Id { get; set; }
	public Article Article { get; set; } //对应的文章
	public string Message { get; set; }
}

在这里插入图片描述

Article a1 = new Article();
a1.Title = "微软发布.NET 6大版本的首个预览";
a1.Content = "微软昨日在一篇官网博客文章中宣布了 .NET 6 首个预览版本的到来。";
Comment c1 = new Comment() { Message = "支持" };
Comment c2 = new Comment() { Message = "微软太牛了" };
Comment c3 = new Comment() { Message = "火钳刘明" };
a1.Comments.Add(c1);
a1.Comments.Add(c2);
a1.Comments.Add(c3);
using TestDbContext ctx = new TestDbContext();
ctx.Articles.Add(a1);//只需要加入Article就可以,会自动增加Comment对象到数据库
await ctx.SaveChangesAsync();

显示加载 Include 起到关联查询

Article a = ctx.Articles.Include(a => a.Comments).Single(a => a.Id == 1);

Include方法起到了关联查询作用,用它生成对其他关联实体的查询操作
使用Include不仅仅能够查询到id=1的文章,也能查询到该文章所对应的评论

Article a = ctx.Articles.Include(a => a.Comments).Single(a => a.Id == 1);
Console.WriteLine(a.Title);
foreach (Comment c in a.Comments)
{
	Console.WriteLine(c.Id + ":" + c.Message);
}

EF Core高级技术

EF Core 原理
EF Core性能优化

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker概述与基础入门

1. 什么是Docker&#xff1f; Docker 是一个开源的平台&#xff0c;用于自动化应用程序的构建、部署和管理。它允许开发人员通过将应用程序及其依赖项打包成容器镜像&#xff0c;从而确保应用可以在任何环境中一致地运行。Docker 容器是轻量级的、可移植的、且具有高度隔离性的…

【Linux学习】十五、Linux/CentOS 7 用户和组管理

Linux下组和用户的管理都必须是root用户下进行&#xff1a; 一、组的管理 1.组的创建 格式&#xff1a; groupadd 组名参数&#xff1a; -g&#xff1a;指定用户组的组ID&#xff08;GID&#xff09;&#xff0c;如果不提供则由系统自动分配。 【案例】创建一个名为 oldg…

XV6 开发环境搭建

Step 1 搭建ubuntu 20.04 虚拟机 注意&#xff1a;一定要使用ubuntu 20.04&#xff0c;该版本可以直接通过deb安装gnu编译工具链。 安装完虚拟机后&#xff0c;换apt源。 ubuntu20.04镜像下载链接 设置root账户密码: sudo passwd root Step 2 下载解压qemu 5.1.0 wget ht…

计算机网络-基础概念(HTTP,TPC/IP, DNS,URL)

HTTP不同的版本 HTTP0.9于1990年问世&#xff0c;此时HTTP并没有作为正式的标准被建立。HTTP正式被公布是1996年的5月&#xff0c;版本命名为HTTP/1.0。HTTP1.1&#xff0c;1997年1月公布&#xff0c;目前仍然是主流版本的HTTP协议版本。 TCP/IP 通常使用的网络是在TCP/IP协…

使用枚举实现单例模式,不会反序列化破坏攻击,不会被反射破坏攻击。(附带枚举单例的简单实现)

原因分析 1.反序列化方法 ① jdk8中的Enum源码中对反序列化方法进行重写&#xff0c;抛出异常。 java.lang.Enum#readObject方法截图如下 ②java.io.ObjectInputStream#readObject 方法中的 readEnum 方法处理了枚举类型的反序列化&#xff0c;从而确保了枚举的单例特性。 …

数据挖掘之聚类分析

聚类分析&#xff08;Clustering Analysis&#xff09; 是数据挖掘中的一项重要技术&#xff0c;旨在根据对象间的相似性或差异性&#xff0c;将对象分为若干组&#xff08;簇&#xff09;。同一簇内的对象相似性较高&#xff0c;而不同簇间的对象差异性较大。聚类分析广泛应用…

【C++】判断能否被 3, 5, 7 整除问题解析与优化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述&#x1f4af;老师代码实现与分析老师代码逻辑分析优点缺点 &#x1f4af;学生代码实现与分析学生代码逻辑分析优点缺点 &#x1f4af;改进与优化优化代码实现优化…

PHP开发日志 ━━ 基础知识:四种不同的变量返回方式该如何调用

最近在给框架升级&#xff0c;其中涉及到古早的缓存系统升级&#xff0c;现在准备区分类型为混合、变量和普通文件&#xff0c;那么变量用什么形式存储到缓存才能给后续开发带来便利和通用性呢&#xff1f;于是就涉及到了本文的php基础知识。 好吧&#xff0c;又是一个无用的知…

Y3编辑器教程5:触发器进阶使用(镜头、UI、表格、函数库、排行榜、游戏不同步)

文章目录 一、游戏声音设计二、 游戏镜头设计2.1 镜头的基本参数2.2 镜头时间轴动画 三、界面编辑3.1 界面编辑器设置3.2 添加按钮事件3.3 触发编写 四、 表格编辑器&#xff08;实现对话UI&#xff09;4.1 一维表和多维表4.2 数据验证、搜索、保存与撤销4.3 Excel导入导出4.4 …

高中数学:成对数据的统计分析

文章目录 一、成对数据的统计相关性1、相关关系2、样本相关系数 二、一元线性回归模型及其应用1、一元线性回归模型2、最小二乘估计3、拟合效果比较公式4、注意点5、例题 三、列联表与独立性检验1、分类变量2、分类变量与列联表3、独立性检验4、常用小概率值和临界值5、例题6、…

Python OCR文字识别api接口

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

Type-C接口电热毯的创新之旅

在科技日新月异的今天&#xff0c;智能家居产品正逐步渗透到我们生活的每一个角落&#xff0c;从智能灯光到温控系统&#xff0c;无一不展现着科技带来的便捷与舒适。而在这个追求高效与智能化的浪潮中&#xff0c;一款结合了最新科技元素的电热毯——Type-C接口电热毯&#xf…

【Unity3D】实现UGUI高亮引导点击

Unity版本2019.4.0f1 Personal <DX11> using UnityEngine; using UnityEngine.UI;public class GuideMask : MonoBehaviour, ICanvasRaycastFilter {public Canvas canvas;public Transform guideTargetTrans;public Image image;private Vector3 guideTargetWorldPos;pr…

docker启动一个helloworld(公司内网服务器)

这里写目录标题 容易遇到的问题&#xff1a;1、docker连接问题 我来介绍几种启动 Docker Hello World 的方法&#xff1a; 最简单的方式&#xff1a; docker run hello-world这会自动下载并运行官方的 hello-world 镜像。 使用 Nginx 作为 Hello World&#xff1a; docker…

Redisson常用方法

Redisson 参考: 原文链接 定义&#xff1a;Redisson 是一个用于与 Redis 进行交互的 Java 客户端库 优点&#xff1a;很多 1. 入门 1.1 安装 <!--redission--> <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifa…

火焰传感器与C++编程:精准检测火灾的技术实现

火灾是我们日常生活中一个不可忽视的安全隐患&#xff0c;而火灾报警系统的实现可以大大提高我们的安全保障。通过嵌入式技术和传感器&#xff0c;我们能够在第一时间识别火灾隐患并发出警报。火焰传感器作为一种专门用于火灾监测的传感器&#xff0c;能高效地通过红外线&#…

arcGIS使用笔记(无人机tif合并、导出、去除黑边、重采样)

无人机航拍建图之后&#xff0c;通过大疆智图软件可以对所飞行的区域的进行拼图&#xff0c;但是如果需要对拼好的图再次合并&#xff0c;则需要利用到arcGIS软件。下面介绍arcGIS软件在这个过程中常用的操作。 1.导入tif文件并显示的方法&#xff1a;点击“”图标进行导入操作…

VMware Workstation的有线连接消失了

进入/var/lib目录下 cd /var/lib 查看是否存在NetworkManager 文件 ls 将其删除&#xff0c;然后虚拟机reboot一下。 sudo rm -r NetworkManager reboot 解决了&#xff0c;可以联网

算法-动态数组-62.不同路径

一、题目 二、思路解析 1.思路&#xff1a; 对于找到目的地它的来源主要来源于目的地的上一格和目的地的左一格 2.常用方法&#xff1a; 无 3.核心逻辑&#xff1a; 1.处理边界&#xff1a; a.只向右移动&#xff0c;至始至终只有一条路径 for(int i0;i<m;i){dp[i][0]1; } …

C# 探险之旅:第三十节 - 类型class(继承Inheritance) —— 当“儿子”继承“老爸”的遗产

嘿&#xff0c;探险家们&#xff01;欢迎再次踏上我们的C#奇幻旅程。今天&#xff0c;我们要聊一个既有趣又实用的话题——继承&#xff08;Inheritance&#xff09;&#xff01;想象一下&#xff0c;如果你的“儿子”能够继承“老爸”的遗产&#xff0c;那编程世界里的对象们也…