开发者社区> 优惠券发放> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

C# 数据操作系列 - 5. EF Core 入门

简介:
+关注继续查看

C# 数据操作系列 - 5. EF Core 入门

0.前言
上一章简单介绍了一下ORM框架,并手写了一个类似ORM的工具类。这一章将介绍一个在C#世界里大名鼎鼎的ORM框架——Entity Framework的Core版。

Entity Framework 非Core版目前已经更新到了6代,这是一款经过检验的ORM框架。在这里简单介绍一下Entity Framework(简称EF,额,别拿这个当关键字搜索,要不然你会被忽悠到一个英语培训机构的)的优点。

C#的设计理念是约定优于配置,意思就是通过一定程度的规范性格式化的写法来避免使用配置文件或者配置代码等。而EF可以说是很好的诠释了这个理念。

EF可以在不使用任何配置的前提下,自动解析类与表之间的映射(具体的映射逻辑与我们手写的ORM工具类一致或相近)。
自动跟踪更改。在直接使用通过EF获取的元素时,EF会自动跟踪哪些字段发生了变化,当手动调用保存的时候,EF就会把数据回传给数据库。
可以延迟加载需要的数据,外键引用属性、查询结果等
丰富的映射关系,支持一对一,一对多,多对多,甚至继承、单表多实例等
可以使用Linq 进行查询
非Core版的可以通过数据库表生成实体类,两种都可以通过实体类生成表
基于 ADO.NET 的数据库连接和可用于连接到 SQL Server、Oracle、MySQL、SQLite、PostgreSQL、DB2 等
当然,还有一个特点:EF是约定优于配置,所以EF也可以配置。EF可以使用Fluent式配置,也可以使用配置文件进行配置。

说了一大堆Entity Framework的优点,那么就让我们开始使用Entity Framework Core吧。

这里简单介绍一下选择Core的原因,微乳这几年一直在主推跨平台战略。因为EF更多的是基于.NET Framework开发的,所以微软以EF为基础针对.net core做了一定的修改,然后EF Core诞生了。可以说EF Core是专门为.net core开发的。而且.net core有更多更好的发展。

  1. Entity Framework Core安装
    现在就让我们一起来试着用一下EntityFramework Core吧。

先新建一个项目:

Visual Studio

点下一步,选择Console程序:

点击创建

Visual Studio Code
dotnet new console -o ef_demo
cd ef_demo
然后用VS Code打开 ef_demo目录。

然后选择数据库:

这次与之前的选择不太一样,这次选择 SQLite这个数据库。这是一个超小型的数据库,可以不用安装任何附加软件,只要有一个文件,然后通过代码就可以访问了。

接下来,添加 EF的SQLite包:

在非Visual Studio环境下,安装一个三方库可以使用:

dotnet add package Microsoft.EntityFrameworkCore.Sqlite
这个命令进行安装。这是dotnet命令行安装三方包的命令。对于Visual Studio或者Rider都可以通过图形化的NuGet安装三方包。

如果是使用NuGet的命令行界面进行安装的话,可以通过:

Install-Package Microsoft.EntityFrameworkCore.Sqlite
这行命令来安装NuGet包。

  1. 入门级使用方式
    先创建两个实体类:

public class ModelA
{

public int Id { get; set; }
public string Name { get; set; }
public List<ModelB> ModelBs { get; } = new List<ModelB>();

}
public class ModelB
{

public int Id { get; set; }
public string Name { get; set; }
public int ModelAId { get; set; }
public ModelA modelA { get; set; }

}
然后创建一个继承自

Microsoft.EntityFrameworkCore.DbContext
的上下文类:

public class DefaultContext: DbContext
{

public DbSet<ModelA> ModelAs { get; set; }
public DbSet<ModelB> ModelBs { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
    => options.UseSqlite("Data Source=blogging.db");

}
注意在 OnConfiguration方法里设置连接字符串。

如果是使用的已有数据的数据库,则不需要进行下面的步骤,否则建议执行以下步骤,以便可以由EF Core提供的工具生成数据库:

在 NuGet的控制台界面,输入以下命令:

Install-Package Microsoft.EntityFrameworkCore.Tools
Add-Migration InitialCreate
Update-Database
或者在命令行界面输入:

dotnet tool install --global dotnet-ef
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet ef migrations add InitialCreate
dotnet ef database update
执行成功之后会在项目根目录下多出以下内容:

这是EF Core保留的迁移记录,以便下次使用。

如果项目根目录里没有 blogging.db 这个SQLite文件的话,会自动创建该文件,同时设置好表;如果有,但不是SQLite的文件,则会报错。

使用工具连接到blogging.db数据库,可以看到 EF自动生成的两个实体类对应表的DDL:

CREATE TABLE "ModelBs" (

"Id" INTEGER NOT NULL CONSTRAINT "PK_ModelBs" PRIMARY KEY AUTOINCREMENT,
"Name" TEXT NULL,
"ModelAId" INTEGER NOT NULL,
CONSTRAINT "FK_ModelBs_ModelAs_ModelAId" FOREIGN KEY ("ModelAId") REFERENCES "ModelAs" ("Id") ON DELETE CASCADE

);
-- auto-generated definition
create table ModelAs
(

Id   INTEGER not null
    constraint PK_ModelAs
        primary key autoincrement,
Name TEXT

);
先略过自动映射的关系,我们来看看如何使用:

var context = new DefaultContext();
//添加
context.Add(new ModelA { Id = 10, Name = "测试" });
context.SaveChanges();//保存数据到数据库中
//查询
var modelA = context.ModelAs.Where(p => p.Id > 1).First();
//更新
modelA.Name += DateTime.Now;
context.SaveChanges();
//删除
context.Remove(modelA);
context.SaveChanges();
context.Dispose();
这里简单的演示了一下如何使用,到目前为止EF Core可以满足了入门的开发。当然,EF并不只有这些。下一篇将介绍如何自定义映射关系。

原文地址https://www.cnblogs.com/c7jie/p/12889091.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
4_Making RNNs More Effective(提升RNN的效果)
4_Making RNNs More Effective(提升RNN的效果)
17 0
学习大数据入门
冬季实战营第五期:轻松入门学习大数据
47 0
入门学习大数据
对于上云课程中的云小宝入门学习大数据
27 0
大数据入门知识点
大数据入门知识点
36 0
asp.net core系列 32 EF查询数据 必备知识(1)
asp.net core系列 32 EF查询数据 必备知识(1) 一.查询的工作原理   Entity Framework Core 使用语言集成查询 (LINQ) 来查询数据库中的数据。 通过 LINQ 可使用 C#(或你选择的其他 .NET 语言)基于派生上下文和实体类编写强类型查询。
1608 0
EntityFramework Core数据查询
前言 本节我们再来讲讲EF Core,本节算是回归基础吧,当前项目EF Core还是处于1.1版本中,后续等待.net core等版本稳定了全部会更新到2.0版本中,到时再来更新相关文章分享给大家。 相关数据加载 在EF中一直以来都是通过导航属性来加载一个实体的相关数据,在EF Core中加载相关数据有以下三种模式: 饥饿加载 来自数据库相关联数据的加载也会作为实体的一部分进行加载。
1527 0
+关注
优惠券发放
阿里云优惠码阿里云推荐券bieryun.com
456
文章
25
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载