微软跨平台ORM框架之EFCore
EFCore是微软推出的跨平台ORM框架,想较于EF6.X版本,更加轻量级。EFCore目前已经更新到2.x。
接下来用CodeFirst的方式来使用EFCore.
1.创建控制台程序

2.引入EFCore的Nuget包和Sqlserver的扩展(因为我这里用的Sqlserver数据库,若是别的数据库如Mysql引入相应的包即可)。


3.创建继承成自DbContext上下文,并重载OnConfiguring方法来构建数据库连接字符串
public class CoreDbContext : DbContext
{
/// <summary>
/// 重载OnConfiguring构建数据库连接字符串
/// </summary>
/// <param name="optionsBuilder"></param>
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// 这里直接写的字符串,实际项目中写在配置文件中,然后读取。这里的EFCoreDB就是生成的数据库名
string connectionString = "server=127.0.0.1;uid=sa;pwd=sa123;database=EFCoreDB";
optionsBuilder.UseSqlServer(connectionString);
} }
4.创建Person实体类,通过EFCore映射成数据库中的表。并在上下文中注册
public class Person
{
public int ID { get; set; }
public int Age { get; set; }
public bool Status { get; set; }
public string Name { get; set; }
public DateTime CreateTime { get; set; }
}
public class CoreDbContext : DbContext
{
/// <summary>
/// 重载OnConfiguring构建数据库连接字符串
/// </summary>
/// <param name="optionsBuilder"></param>
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// 这里直接写的字符串,实际项目中写在配置文件中,然后读取
string connectionString = "server=127.0.0.1;uid=sa;pwd=sasa;database=EFCoreDB";
optionsBuilder.UseSqlServer(connectionString);
}
// 注册实体
public DbSet<Person> Person { get; set; }
}
5.在Program文件中初始化数据库
class Program
{
static void Main(string[] args)
{ var context = new CoreDbContext();
// 告诉EFCore我们要创建数据库
context.Database.EnsureCreated();
//Console.WriteLine("Hello World!");
}
}
6.启动程序,查看效果
数据库和Person表已生成

生成的表结构

这里解释一下,在实体中如果有名为ID的字段,或者实体名+ID的字段如:PersonID,那么EFCore生成的表会自动标识为主键。
备注:上边用来创建的数据库的方法 context.Database.EnsureCreated(); 如果存在当前数据库则不会创建。
那么增加了实体,该如何更新数据库呢? context.Database.EnsureDeleted(); 这个方法顾名思义是用来删除数据库。
先调用EnsureDeleted 在调用 EnsureCreated 实现更新数据库的操作。
class Program
{
static void Main(string[] args)
{ var context = new CoreDbContext();
// 删除数据库
context.Database.EnsureDeleted();
// 告诉EFCore我们要创建数据库
context.Database.EnsureCreated();
//Console.WriteLine("Hello World!");
}
}
好嘞! 使用EFCore生成数据库和表就完成了。
微软跨平台ORM框架之EFCore的更多相关文章
- 微软跨平台ORM框架之EFCore — 约定与属性映射
EFCore中的约定简单来说就是规则,CodeFirst基于模型的约定来映射表结构.除此之外还有Fluent API.Data Annotations(数据注释) 可以帮助我们进一步配置模型. 按照这 ...
- c# 国内外ORM 框架 dapper efcore sqlsugar freesql hisql sqlserver数据常规插入测试性能对比
c# 国内外ORM 框架 dapper efcore sqlsugar freesql hisql sqlserver数据常规插入测试性能对比对比 在6.22 号发布了 c# sqlsugar,his ...
- 微软跨平台UI框架MAUI真的要来啦
.NET 6 preview已经上线,是时候为在BUILD 2020上宣布的新.NET Multi-platform App UI(MAUI)做准备了.对于客户端应用程序开发人员来说,这一年.NET有 ...
- Mego(2) - NET主流ORM框架分析
接上文我们测试了各个ORM框架的性能,大家可以很直观的看到各个ORM框架与原生的ADO.NET在境删改查的性能差异.这里和大家分享下我对ORM框架的理解及一些使用经验. ORM框架工作原理 典型ORM ...
- .NET ORM框架HiSql实战-第一章-集成HiSql
一.引言 做.Net这么多年,出现了很多很多ORM框架,比如Dapper,Sqlsugar,Freesql等等.在之前的项目中,用到的ORM框架也大多数是这几个老牌的框架. 不过最近园子关于.NET ...
- 基于.NET的微软ORM框架视频教程(Entity Framework技术)
基于.NET的微软ORM框架视频教程(Entity Framework技术) 第一讲 ORM映射 第二讲 初识EntifyFramework框架 第三讲 LINQ表达式查询 第四讲 LINQ方法查询 ...
- 干!垃圾微软!发布我的Netcore跨平台UI框架 CPF
什么鬼,我的CPF快写好了,你居然也要搞跨平台UI框架?什么Maui? 之前怎么不早说要搞跨平台UI框架呢?看到谷歌搞flutter眼红了?明年年底发布?又搞这种追别人屁股的烂事情. 什么MVU模式? ...
- 2022年了有哪些值得推荐的.NET ORM框架?
前言: 最近有很多同学问我.NET方面有哪些好用的ORM框架,我觉得这方面的介绍网上应该会介绍的比较全面文章,于是我想搜一篇全面的介绍文章发给他们结果我发现网上说来说去基本上就是那几个,于是就有了这篇 ...
- .NET 跨平台RPC框架DotNettyRPC Web后台快速开发框架(.NET Core) EasyWcf------无需配置,无需引用,动态绑定,轻松使用 C# .NET 0配置使用Wcf(半成品) C# .NET Socket 简单实用框架 C# .NET 0命令行安装Windows服务程序
.NET 跨平台RPC框架DotNettyRPC DotNettyRPC 1.简介 DotNettyRPC是一个基于DotNetty的跨平台RPC框架,支持.NET45以及.NET Standar ...
随机推荐
- 15 个 Eclipse 常用开发快捷键使用技巧
15 个 Eclipse 常用开发快捷键使用技巧 1.alt+? 或 alt+/:自动补全代码或者提示代码 2.ctrl+o:快速outline视图 3.ctrl+shift+r:打开资源列表 4.c ...
- ***报错Class 'Redis' not found in(原创)
报错:Class 'Redis' not found in 这个报错,表明phpredis 扩展没有安装好,而不是redis没有安装 有没有安装成功这个扩展,可以通过phpinfo来查看. 解决问题的 ...
- [原创][Synth 8-2543] port connections cannot be mixed ordered and named ["*_Top.v":1151]
Vivado综合错误: [Synth 8-2543] port connections cannot be mixed ordered and named ["*_Top.v":1 ...
- 详解如何在 Linux 启动时自动执行命令或脚本
我一直很好奇,在启动 Linux 系统并登录的过程中到底发生了什么事情.按下开机键或启动一个虚拟机,你就启动了一系列事件,之后会进入到一个功能完备的系统中,有时,这个过程不到一分钟.当你注销或者关机时 ...
- 基于docker/dockerfile实现redis主从复制
今天我们来搭建基于docker实现redis主从复制集群 为什么要使用redis集群模式? Redis可以说是内存数据库,mysql的数据库是真实存储在硬盘里的,因此,redis的读取速度要比mysq ...
- Python程序的执行过程原理(解释型语言和编译型语言)
Python是一门解释型语言?我初学Python时,听到的关于Python的第一句话就是Python是一门解释型语言,我就这样一直相信下去,直到发现.pyc文件的存在,如果真是解释型语言,那么生成的. ...
- vue中使用postMessage进行跨越传值
想在“当前位置”获取子页面的title属性,但是main页面和子页面在不同的端口上,直接获取会出现: “Blocked a frame with origin from accessing a cro ...
- 七、OpenStack—dashboard组件安装
1.安装包# yum install openstack-dashboard2.编辑 /etc/openstack-dashboard/local_settings 文件 需要更改的几处内容如下: ) ...
- JAVA基础复习与总结<十> Ruannable和Callable
程序运行原理 1.分时调度:所有线程轮流使用CPU的使用权,平均分配给每个线程占用CPU的时间. 2.抢占式调度:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性 ...
- 【转】Socket接收字节缓冲区
原创本拉灯 2014年04月16日 10:06:55 标签: socket / 数据包 4448 我们接收Socket字节流数据一般都会定义一个数据包协议( 协议号,长度,内容),由于Socket接收 ...