.NetCore中EFCore的使用整理
EntirtyFramework框架是一个轻量级的可扩展版本的流行实体框架数据访问技术.
其中的.NetCore版本对应EntityFrameworkCore
Git源代码地址:https://github.com/aspnet/EntityFramework/
官方使用文档说明:https://docs.microsoft.com/zh-cn/ef/core/index
官网介绍:
https://docs.microsoft.com/zh-cn/ef/core/get-started/overview/install
一、安装Nuget包
Install-package Microsoft.EntityFrameworkCore
Install-package Microsoft.EntityFrameworkCore.SqlServer
Micorsoft.EntityFrameworkCore:EF框架的核心包
Micorsoft.EntityFrameworkCore.SqlServer:针对SqlServer数据库的扩展,使用SqlServer数据库必须。类似的还有MySql,SqlLite等
Micorsoft.EntityFrameworkCore.Tools
&Micorosft.EntityFrameworkCore.Design:用户根据现有的数据库生成模型代码等 ,更多参考 :https://docs.microsoft.com/zh-cn/ef/efcore-and-ef6/porting/port-edmx
二、使用实例
1.安装Nuget包之后,手动创建上下文,并 注入sql链接字符串

using Microsoft.EntityFrameworkCore; namespace Core2 { public class TestContext : DbContext { //public TestContext(DbContextOptions<TestContext> options) : base(options) //{ //} protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { //注入Sql链接字符串 optionsBuilder.UseSqlServer(@"Server=.;Database=Test1;Trusted_Connection=True;"); } public DbSet<Numeber1> Numeber1s { get; set; } } }
2.手写实体类,只要数据库中 存在对应 的表就可以了

using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace Core2 { [Table("Numeber1")] public class Numeber1 { [Key] public int ID { get; set; } public decimal Num1 { get; set; } } }
3.测试代码:

static void TestOne() { TestContext _context = new TestContext(); int count = _context.Numeber1s.Count(); Console.WriteLine(count); } static void TestTwo() { DateTime start = DateTime.Now; TestContext _context = new TestContext(); for (int i = 0; i < 10000; i++) { _context.Numeber1s.Add(new Numeber1() { Num1 = i }); _context.SaveChanges(); } Console.WriteLine(_context.Numeber1s.Count()); Console.WriteLine("总时间,秒数:" + (DateTime.Now - start).TotalSeconds); }
在调试的状态下1万条插入数据执行时间:
三、根据数据库生成模型
1.安装EntityFrameworkCore.Design,EntityFrameworkCore.Tools,EntityFrameworkCore.SqlServer.Design
注:在EFCore2.0中只需要安装
EntityFrameworkCore.Tools
如果不需要自动根据数据库生成代码,这个几个类库可以不安装 。
Install-package Microsoft.EntityFrameworkCore.Design
Install-package Microsoft.EntityFrameworkCore.Tools
Install-package Microsoft.EntityFrameworkCore.SqlServer.Design
2.选择对应的项目,执行生成命名
Scaffold-DbContext "Server=.;database=test1;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models2
3.生成结果如下 :

四、Asp.Net Core中注册EF的上下文处理,在Startup文件中
1.注册服务
//配置EF的服务注册 services.AddEntityFramework() .AddDbContext<NotifyBirdContext>(options => { options.UseSqlServer(Configuration.GetConnectionString("SqlServer"), //读取配置文件中的链接字符串 b => b.UseRowNumberForPaging()); //配置分页 使用旧方式 });

2.修改上下文,重点指定DbContextOptions有外部配置
public NotifyBirdContext(DbContextOptions<NotifyBirdContext> opt) : base(opt) { }
3.在控制器中使用数据库上下文服务
NotifyBirdContext _Context = null; public ProjectController(NotifyBirdContext context) { _Context = context; } /// <summary> /// 获取可用项目数量 /// </summary> /// <returns></returns> [HttpGet("getcount")] public int GetCount() { try { return _Context.Project.Count(); } catch (Exception ex) { throw ex; } }
五 、.Net Core中 EF Core上下文配置 2,使用全局变量方式定义链接字符串
1.使用空参数构造器的上下文
/// <summary> /// 全局定义数据连接字符串 /// </summary> public static string ConStr { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { //optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;database=NotifyBird;Trusted_Connection=True;"); //配置数据链接 optionsBuilder.UseSqlServer(ConStr,b=>b.UseRowNumberForPaging()); }
2.程序 启动注册链接
public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc(); NotifyBirdContext.ConStr = Configuration.GetConnectionString("SqlServer"); }
3.任意位置实例化,上下文使用
/// <summary> /// 获取可用项目数量 /// </summary> /// <returns></returns> [HttpGet("getcount")] public int GetCount() { try { NotifyBirdContext _Context = new NotifyBirdContext(); return _Context.Project.Count(); } catch (Exception ex) { throw ex; } }
更多 :
VS Code搭建.NetCore开发环境(二)
VS Code搭建.NetCore开发环境(一)
Chocolatey 简介(软件自动化管理工具)
分类:
Asp.Net Core
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)