上一章简单介绍了一下ORM框架,并手写了一个相似ORM的工具类。这一章将介绍一个在C#世界里大名鼎鼎的ORM框架——Entity Framework的Core版。sql
Entity Framework 非Core版目前已经更新到了6代,这是一款通过检验的ORM框架。在这里简单介绍一下Entity Framework(简称EF,额,别拿这个当关键字搜索,要否则你会被忽悠到一个英语培训机构的)的优势。shell
C#的设计理念是约定优于配置,意思就是经过必定程度的规范性格式化的写法来避免使用配置文件或者配置代码等。而EF能够说是很好的诠释了这个理念。数据库
固然,还有一个特色: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有更多更好的发展。框架
如今就让咱们一块儿来试着用一下EntityFramework Core吧。ide
先新建一个项目:工具
Visual Studio测试
点下一步,选择Console程序:ui
点击建立
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包。
先建立两个实体类:
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并不仅有这些。下一篇将介绍如何自定义映射关系。
更多内容烦请关注个人博客《高先生小屋》