个人笔记:ORM数据库框架EFCore使用示例,运行通过,附源码

news2024/12/26 22:53:22

个人笔记:ORM数据库框架EFCore使用示例,运行通过,附源码

      • 0.新建项目
      • 1. 设置环境
        • 1.1. 添加 NuGet 包
        • 1.2. 创建模型类
      • 2. 创建上下文类
      • 3. 创建数据库和表
        • 3.1. 启用迁移
        • 3.2. 更新数据库
      • 4. 插入数据
      • 5. 查询数据
      • 6. 更新数据
      • 7. 删除数据
      • 8. 完整示例
      • 总结

0.新建项目

选择C# 命令行项目。框架选.NET8.
在这里插入图片描述
在这里插入图片描述

建好后项目如下:
在这里插入图片描述
最后,打开程序包管理控制台。为下一步做准备。
在这里插入图片描述

1. 设置环境

1.1. 添加 NuGet 包

首先,在项目中安装 Entity Framework Core 和 SQLite(或者选择其他数据库提供程序,例如 SQL Server)相关的 NuGet 包。您可以使用以下命令在包管理控制台中安装:

Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.Sqlite
Install-Package Microsoft.EntityFrameworkCore.Tools
1.2. 创建模型类

新建文件sqliteEF,然后创建一个实体类,表示要映射到数据库的表。以下是一个示例 Book 类:

public class Book
{
    public int BookId { get; set; }    // 主键
    public string Title { get; set; }   // 书名
    public int PublicationYear { get; set; } // 出版年份
}

2. 创建上下文类

创建一个 DbContext 类,以便 EF Core 能够与数据库进行交互。

using Microsoft.EntityFrameworkCore;

public class BookContext : DbContext
{
    public DbSet<Book> Books { get; set; } // 表映射

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // 配置连接字符串
        _ = optionsBuilder.UseSqlite($"Data Source={Path.Combine(AppContext.BaseDirectory, "books.db")}");
		// 这里路径不能用相对路径,例如:"books.db"。会有update命令和程序路径不一致的问题。
    }
}

3. 创建数据库和表

可以使用迁移功能创建数据库和表。

3.1. 启用迁移

在包管理控制台中运行以下命令以启用迁移:

Add-Migration InitialCreate

运行命令后会多一个文件夹。

3.2. 更新数据库

运行以下命令更新数据库,创建表:

Update-Database

注意:date-Database -Verbose 可以获取更多信息,便于调试

4. 插入数据

创建一个方法,将数据插入数据库:

public void AddBook(string title, int year)
{
    using (var context = new BookContext())
    {
        var book = new Book { Title = title, PublicationYear = year };
        context.Books.Add(book);
        context.SaveChanges();
    }
}

5. 查询数据

查询数据库中的所有书籍:

public List<Book> GetAllBooks()
{
    using (var context = new BookContext())
    {
        return context.Books.ToList();
    }
}

6. 更新数据

更新书籍信息的示例:

public void UpdateBook(int bookId, string newTitle, int newYear)
{
    using (var context = new BookContext())
    {
        var book = context.Books.Find(bookId);
        if (book != null)
        {
            book.Title = newTitle;
            book.PublicationYear = newYear;
            context.SaveChanges();
        }
    }
}

7. 删除数据

通过书籍 ID 删除书籍的示例:

public void DeleteBook(int bookId)
{
    using (var context = new BookContext())
    {
        var book = context.Books.Find(bookId);
        if (book != null)
        {
            context.Books.Remove(book);
            context.SaveChanges();
        }
    }
}

8. 完整示例

以下是一个完整的控制台应用程序示例,结合了上述所有功能:

//========Program.cs文件
// See https://aka.ms/new-console-template for more information
using ConsoleApp3;

Console.WriteLine("Hello, World!");

var sqlite = new SqliteEF();

// 添加书籍  
sqlite.AddBook("C# Programming", 2021);
sqlite.AddBook("Entity Framework Core", 2020);

// 查询所有书籍  
var books = sqlite.GetAllBooks();
foreach (var book in books)
{
    Console.WriteLine($"{book.BookId}: {book.Title} - {book.PublicationYear}");
}

// 更新书籍
sqlite.UpdateBook(1, "Advanced C# Programming", 2022);

// 删除书籍
sqlite.DeleteBook(2);

// 重新查询所有书籍
Console.WriteLine("After updates、del:");
books = sqlite.GetAllBooks();
foreach (var book in books)
{
    Console.WriteLine($"{book.BookId}: {book.Title} - {book.PublicationYear}");
}
//==========
//========SqliteEF.cs文件
using Microsoft.EntityFrameworkCore;
namespace ConsoleApp3
{
    public class Book
    {
        public int BookId { get; set; }    // 主键  
        public required string Title { get; set; }   // 书名  
        public int PublicationYear { get; set; } // 出版年份  
    }
	public class BookContext : DbContext
	{
    	public DbSet<Book> Books { get; set; } // 表映射  

    	protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    	{
			optionsBuilder.UseSqlite($"Data Source={Path.Combine(AppContext.BaseDirectory, "books.db")}");
       		// 这里路径不能用相对路径,例如:"books.db"。会有update命令和程序路径不一致的问题。
    	}
	}


   public class SqliteEF
	{
    	public void AddBook(string title, int year)
	    {
	        using BookContext context = new();
	        Book book = new() { Title = title, PublicationYear = year };
	        _ = context.Books.Add(book);
	        _ = context.SaveChanges();
	    }
	    public List<Book> GetAllBooks()
	    {
	        using BookContext context = new();
	        return context.Books.ToList();
	    }
	    public void UpdateBook(int bookId, string newTitle, int newYear)
	    {
	        using BookContext context = new();
	        Book? book = context.Books.Find(bookId);
	        if (book != null)
	        {
	            book.Title = newTitle;
	            book.PublicationYear = newYear;
	            _ = context.SaveChanges();
	        }
	    }
	
	    public void DeleteBook(int bookId)
	    {
	        using BookContext context = new();
	        Book? book = context.Books.Find(bookId);
	        if (book != null)
	        {
	            _ = context.Books.Remove(book);
	            _ = context.SaveChanges();
	        }
	    }    
	}
}

总结

  • 创建 DbContext: 具有 DbSet 属性用于映射到数据库表。
  • 使用迁移创建表: 通过 EF Core 的迁移功能创建数据库和表。
  • CRUD 操作: 使用简单的方法实现插入、查询、更新和删除的功能。
    源码:

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

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

相关文章

IndexOf Apache Web For Liunx索引服务器部署及应用

Apache HTTP Server 是一款广泛使用的开源网页服务器软件,它支持多种协议,包括 HTTP、HTTPS、FTP 等 IndexOf 功能通常指的是在一个目录中自动生成一个索引页面的能力,这个页面会列出该目录下所有的文件和子目录。比如网上经常看到的下图展现的效果,那么接下来我们就讲一下…

Ubuntu 24.04.1 LTS快速源码安装postgresql15

虽然在Ubuntu中我们可以通过apt直接获取postgresql安装&#xff0c;但有些时候&#xff0c;为了自行配置postgresql安装路径和部分组件参数&#xff0c;我们需要源码安装postgresql。今天我们就通过源码编译postgresql15源码进行安装。 一、获取安装包 我们登录postgresql官网…

数据结构之栈,队列,树

目录 一.栈 1.栈的概念及结构 2.栈的实现 3.实现讲解 1.初始化栈 2.销毁栈 3.压栈 4.出栈 5.返回栈顶元素 6.返回栈内元素个数 7.判断栈内是否为空 二.队列 1.队列的概念及结构 2.队列的实现 3.实现讲解 1.初始化队列 2.销毁队列 3.单个成员入队列 4.单个成员…

Git基本操作快速入门(30min)

Git基本操作快速入门&#xff08;30min&#xff09; 文章目录 Git基本操作快速入门&#xff08;30min&#xff09;1. 建立本地仓库2. 本地仓库链接到远端仓库3. 将本地仓库推送到远端4. Git常用命令 作为一名程序员&#xff0c;使用Github来进行代码的版本管理是必修课&#xf…

汽车IVI中控开发入门及进阶(42):OpenVG

概览: OpenVG是一个无版权、跨平台的API,它为高级用户界面和矢量图形库(如SVG)提供了一个低级硬件加速接口。OpenVG主要针对需要便携式加速高质量矢量图形以获得引人注目的用户界面和文本的消费电子产品、手持设备、可穿戴设备和汽车设备,同时使硬件加速能够在非常低的功…

[1111].集成开发工具Pycharm安装与使用

所有博客大纲 后端学习大纲 Python大纲 1.下载&#xff1a; 官方下载地址 2.安装&#xff1a; 1.双击exe文件&#xff0c;然后下一步选择安装目录 2.选择桌面快捷方式及安装&#xff1a; 3.安装完成 3.启动&#xff1a; 4.设置&#xff1a; 4.1.设置运行时环境&#xff1a;…

Windows11 安装 Ubuntu-20.04,同时安装配置 zsh shell,配置 git 别名(alias),大大提高开发效率

背景&#xff1a;家里配置了一台 Windows 电脑&#xff0c;有时候需要用到 vscode 开发测试一些代码&#xff0c;在使用过程中发现原生 windows 敲代码不是很友好&#xff0c;于是想到配置 wsl&#xff0c;安装 Ubuntu&#xff0c;并安装配置 zsh shell&#xff0c;同时配置 gi…

面试场景题系列:设计限流器

首先看看使用API限流器的好处。 •预防由拒绝服务攻击(Denial of Service&#xff0c;DoS)引起的资源耗尽问题。大型科技公司发布的所有API几乎都强制执行某种形式的限流操作。例如&#xff0c;推特限制每个用户每3小时最多发300条推文。谷歌文档API的默认限制是每个用户每60秒…

Node.js 工具:在 Windows 11 中配置 Node.js 的详细步骤

一、概述 记录时间 [2024-12-25] 本文讲述如何在 Windows 11 中进行 Node.js 工具的安装和配置。 以下是详细的步骤和说明。 二、安装 Node.js 1. 官网下载 通过官网&#xff0c;下载 Node.js&#xff0c;上面有好几种下载方式&#xff0c;文中下载的是 zip 压缩包。 如图&…

DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(2)

DevOps实战&#xff1a;用Kubernetes和Argo打造自动化CI/CD流程&#xff08;2&#xff09; 背景 架构图 正片开始之前&#xff0c;请一定先熟悉上面的架构图&#xff0c;跟着我的步骤&#xff0c;一步一步执行成功&#xff0c;相信后续根据自己特定的需求定制CI/CD。 需求 …

【Java 学习】详细讲解---包和导包、Scanner类、输入源

1. 包 1.1 什么是包&#xff1f; 举个例子&#xff0c;你和你的同学有不同的家庭&#xff0c;你们都有自己的爸爸妈妈&#xff0c;都有自己的家。在自己的家中你们可以按照自己爱好摆放东西&#xff0c;都互不干扰。但是&#xff0c;假如你们的家都在一起&#xff0c;你们就不…

EasyExcel停更,FastExcel接力

11月6日消息&#xff0c;阿里巴巴旗下的Java Excel工具库EasyExcel近日宣布&#xff0c;将停止更新&#xff0c;未来将逐步进入维护模式&#xff0c;将继续修复Bug&#xff0c;但不再主动新增功能。 EasyExcel以其快速、简洁和解决大文件内存溢出的能力而著称&#xff0c;官方…

Python PDF批量加密工具

Python PDF批量加密工具 1.简介&#xff1a; ‌一个Python写的PDF批量加密工具。PDF批量加密‌是一种保护PDF文件安全性的方法&#xff0c;通过为多个PDF文件设置相同的密码&#xff0c;防止未经授权的用户访问这些文件。批量加密可以大大提高工作效率&#xff0c;特别是在处…

项目2路由交换

背景 某学校为满足日常教学生活需求&#xff0c;推动数字校园的建设&#xff0c;学校有办公楼和学生宿舍楼和服务器集群三块区域&#xff0c;请合理规划IP地址和VLAN&#xff0c;实现企业内部能够互联互通现要求外网能通过公网地址访问服务器集群&#xff0c;学生和老师能正常…

知识梳理笔记--Kerberos 协议

Kerberos 协议概述 Kerberos 是一种计算机网络认证协议&#xff0c;旨在为不安全的网络提供强认证服务。它通过中心化的身份验证系统&#xff08;即 Key Distribution Center&#xff0c;KDC&#xff09;来确保通信双方的身份验证和数据加密。Kerberos 协议主要用于确保计算机系…

9个用于测试自动化的最佳AI测试工具(2024)

选择一款优质的基于生成式AI人工智能的测试工具能够确保测试过程的准确性和效率&#xff0c;从而加速整个软件测试周期。相反&#xff0c;设计不佳的测试工具可能无法发现错误&#xff0c;并可能存在安全问题。它们可能产生误报或漏报&#xff0c;误导开发与测试团队&#xff0…

uni-app 跨端开发精美开源UI框架推荐

&#x1f380;&#x1f380;&#x1f380;uni-app 跨端开发系列 &#x1f380;&#x1f380;&#x1f380; 一、uni-app 组成和跨端原理 二、uni-app 各端差异注意事项 三、uni-app 离线本地存储方案 四、uni-app UI库、框架、组件选型指南 五、uni-app 蓝牙开发 六、uni-app …

【1224】数据结构(sizeof/数组的长度定义/读取字符串函数/线性表长度/左值右值/静态变量/指针与引用)

1.对一维整型数组a的正确说明是 #define SIZE 10 (换行) int a[SIZE];说法是否正确&#xff1f; 正确 数组的SIZE可以用宏定义&#xff0c;但不能用变量 2.如有定义&#xff1a;char str[20];&#xff0c;能将从键盘输入的字符串“How are you”保存到 str 数组的语句是&#x…

强化特种作业管理,筑牢安全生产防线

在各类生产经营活动中&#xff0c;特种作业由于其操作的特殊性和高风险性&#xff0c;一直是安全生产管理的重点领域。有效的特种作业管理体系涵盖多个关键方面&#xff0c;从作业人员的资质把控到安全设施的配备维护&#xff0c;再到特种设备的精细管理以及作业流程的严格规范…

(六)循环神经网络_基本的RNN

一、提出背景 前馈神经网络不考虑数据之间的关联性&#xff0c;网络的输出只和当前时刻网络的输入相关。然而&#xff0c;现实问题中存在着很多序列型的数据&#xff08;文本、语音以及视频等&#xff09;。 例如&#xff1a;室外的温度是随着气候的变化而周期性的变化的&…