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

0.前言

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

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

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

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

固然,还有一个特色:EF是约定优于配置,因此EF也能够配置。EF可使用Fluent式配置,也可使用配置文件进行配置。c#

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

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

1. Entity Framework Core安装

如今就让咱们一块儿来试着用一下EntityFramework Core吧。ide

先新建一个项目:工具

  • Visual Studio测试

    image-20200514001534081

    点下一步,选择Console程序:ui

    image-20200514001603822

    点击建立

  • 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包。

2. 入门级使用方式

先建立两个实体类:

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

执行成功以后会在项目根目录下多出如下内容:

image-20200514013331349

这是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并不仅有这些。下一篇将介绍如何自定义映射关系。

更多内容烦请关注个人博客《高先生小屋》

file

相关文章
相关标签/搜索