Entity Framework 是一种支持 .NET 开发人员使用 .NET 对象处理数据库的对象关系映射程序 (O/RM)。 它不要求提供开发人员通常需要编写的大部分数据访问代码。
Entity Framework (EF) Core 是轻量化、可扩展和跨平台版的常用 Entity Framework 数据访问技术。
对于 EF Core,使用模型执行数据访问。 模型由实体类和表示数据库会话的派生上下文构成,用于查询和保存数据
using Microsoft.EntityFrameworkCore; using System.Collections.Generic; namespace Intro { public class BloggingContext : DbContext { public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(@"Server=(localdb)mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } public int Rating { get; set; } public List<Post> Posts { get; set; } } public class Post { public int PostId { get; set; } public string Title { get; set; } public string Content { get; set; } public int BlogId { get; set; } public Blog Blog { get; set; } } }
使用语言集成查询 (LINQ) 从数据库检索实体类的实例
using (var db = new BloggingContext()) { var blogs = db.Blogs .Where(b => b.Rating > 3) .OrderBy(b => b.Url) .ToList(); }
实体类的实例在数据库中创建、删除和修改数据
using (var db = new BloggingContext()) { var blog = new Blog { Url = "http://sample.com" }; db.Blogs.Add(blog); db.SaveChanges(); }
从 EF6 具有大量的幻它围绕选择数据库连接和初始化数据库执行。这些规则包括:
-
如果不执行任何配置,则从 EF6 将选择 SQL Express 或 LocalDb 上的数据库。
-
如果连接字符串具有相同名称作为上下文是在应用程序
App/Web.config
文件,将使用此连接。 -
如果数据库不存在,则创建它。
-
如果没有任何从模型表的数据库中存在,则会将当前模型的架构添加到数据库。 如果启用迁移后,它们用于创建数据库。
-
如果数据库存在并从 EF6 以前已创建了架构,然后针对与当前模型的兼容性检查架构。 如果自创建架构时,该模型已更改,将引发异常。
EF 核心不执行任何此幻数。
-
必须在代码中显式配置数据库连接。
-
不执行初始化。 必须使用
DbContext.Database.Migrate()
将迁移 (或DbContext.Database.EnsureCreated()
和EnsureDeleted()
而无需使用迁移的创建或删除数据库)。 -
代码的第一个表命名约定
从 EF6 通过计算该实体映射到的默认表名称的复数形式服务运行的实体类名。
EF 核心使用的名称的
DbSet
派生上下文公开了实体的属性。 如果该实体没有DbSet
使用属性,则类名称。
以下特征对 .NET Core 进行了最好的定义:
- 部署灵活:可以包含在应用或已安装的并行用户或计算机范围中。
- 跨平台:可以在 Windows、macOS 和 Linux 上运行;也可移植到其他操作系统。 Microsoft、其他公司和个人提供的支持的操作系统 (OS)、CPU 和应用程序方案会随着时间推移而增多。
- 命令行工具:可在命令行中执行所有产品方案。
- 兼容性:.NET Core 通过 .NET 标准与 .NET Framework、Xamarin 和 Mono 兼容。
- 开放源:.NET Core 是一个开放源平台,使用 MIT 和 Apache 2 许可证。 文档由 CC-BY 许可发行。 .NET Core 是一个 .NET Foundation 项目。
- 由 Microsoft 支持:.NET Core 由 Microsoft 依据 .NET Core 支持提供支持
.NET Core 包括以下部分:
- .NET 运行时:提供类型系统、程序集加载、垃圾回收器、本机互操作和其他基本服务。
- 一组 框架库:提供基元数据类型、应用编写类型和基本实用程序。
- 一组 SDK 工具和语言编译器:提供基本的开发人员体验,可用于 .NET Core SDK。
- “dotnet”应用主机,用于启动 .NET Core 应用。 它选择运行时并托管运行时,提供程序集加载策略来启动应用。 同一主机还可用于以大致相同的方式启动 SDK 工具。
语言
可以使用 C#、Visual Basic 和 F# 语言编写适用于 .NET Core 的应用程序和库。 在 .NET Core 上运行的编译器可以在其运行的任何地方进行 .NET Core 开发。 一般情况下,不会直接使用编译器,但会间接使用 SDK 工具。
C#、Visual Basic 和 F# 编译器以及 .NET Core 工具已集成到或可以集成到多个文本编辑器和 IDE 中,包括 Visual Studio、Visual Studio CodeSublime Text 和 Vim,使 .NET Core 开发可以在钟爱的编码环境和 OS 中进行。 这种集成部分由 OmniSharp 项目的高手提供。
.NET API 和兼容性
可将 .NET Core 看作是 .NET Framework 在 .NET Framework 基类库 (BCL) 的跨平台版本。 它实施 .NET 标准规范。 .NET Core 提供了一个可用于 .NET Framework 或 Mono/Xamarin 的 API 子集。 在某些情况下,类型未完全实现(某些成员不可用或已移动)。
有关 .NET Core API 的详细信息,请参阅 .NET Core roadmap(.NET Core API 产品系列)。
与 .NET Standard 的关系
.NET 标准是一种 API 规范,用于描述开发者可以在每个 .NET 实现代码中使用的一组一致 .NET API。 .NET 实现需要实现此规范才能被视为符合 .NET Standard ,并且才能支持面向 .NET Standard 的库。
由于 .NET Core 可实现 .NET Standard,因此也支持 .NET Standard 库。
工作负载
就本身而言,.NET Core 包括单个应用程序模型(控制台应用),这对工具、本地服务和基于文本的游戏很有用。 除 .NET Core 外,还生成了其他应用程序模型以扩展其功能,例如:
开放源
.NET Core 属于开放源(MIT 许可证),由 Microsoft 于 2014 年提供给 .NET Foundation。 现在它是最活跃的 .NET Foundation 项目之一。 可由个人和企业自由采用,包括用于个人、学术或商业目的。 许多公司已使用 .NET Core 作为应用、工具、新平台和托管服务的一部分。 其中某些公司对 GitHub 上的 .NET Core 做出了巨大贡献,并作为 .NET Foundation Technical Steering Group(.NET Foundation 技术控制组)的成员,指导产品方向。
.NET Core 和 .NET Framework 的主要差异在于:
- 应用模型 -- .NET Core 不支持所有 .NET Framework 应用模型,某种程序上是因为其中许多模型都是基于 Windows 技术,如 WPF(基于 DirectX 生成)。 但 .NET Core 和 .NET Framework 两者都支持控制台和 ASP.NET Core 应用模型。
- API -- .NET Core 包含很多与 .NET Framework 相同,但数量较少的 API,并且具有不同的组成要素(程序集名称不同;关键用例中的类型形状不同)。 目前,这些差异通常都需要更改,以将源移植到 .NET Core。 .NET Core 实现 .NET 标准 API,随着时间的推移,将包含更多 .NET Framework BCL API。
- 子系统 -- .NET Core 实现 .NET Framework 中子系统的子级,目的是实现更简单的实现和编程模型。 例如,不支持代码访问安全性 (CAS),但支持反射。
- 平台 -- .NET Framework 支持 Windows 和 Windows Server,而 NET Core 还支持 macOS 和 Linux。
- 开放源 -- .NET Core 属于开放源,而 .NET Framework 的只读子集属于开放源。
.NET Core 和 Mono 的主要差异在于:
- 应用模型 -- Mono 通过 Xamarin 产品支持 .NET Framework 应用模型(例如,Windows Forms)和其他应用模型(例如,Xamarin.iOS)的子集。 而 .NET Core 不支持这些内容。
- API -- Mono 使用相同程序集名称和组成要素支持 .NET Framework API 的 大型子集。
- 平台 -- Mono 支持很多平台和 CPU。
- 开放源 -- Mono 和 .NET Core 两者都使用 MIT 许可证,且都属于 .NET Foundation 项目。
- 焦点 --最近几年,Mono 的主要焦点是移动平台,而 .NET Core 的焦点是云工作负荷。
EF Core 是轻量化、可扩展和跨平台版的 Entity Framework。