Entity Framework 是一种支持 .NET 开发人员使用 .NET 对象处理数据库的对象关系映射程序 (O/RM)。 它不要求提供开发人员通常需要编写的大部分数据访问代码。
Entity Framework (EF) Core 是轻量化、可扩展和跨平台版的常用 Entity Framework 数据访问技术。
模型由实体类和表示数据库会话的派生上下文构成,用于查询和保存数据
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文件,将使用此连接。 -
如果数据库不存在,则创建它。
-
如果启用迁移后,它们用于创建数据库。
-
如果自创建架构时,该模型已更改,将引发异常。
EF 核心不执行任何此幻数。
-
必须在代码中显式配置数据库连接。
-
必须使用
DbContext.Database.Migrate()将迁移 (或DbContext.Database.EnsureCreated()和EnsureDeleted()而无需使用迁移的创建或删除数据库)。 -
代码的第一个表命名约定
从 EF6 通过计算该实体映射到的默认表名称的复数形式服务运行的实体类名。
如果该实体没有
DbSet使用属性,则类名称。
以下特征对 .NET Core 进行了最好的定义:
- 部署灵活:可以包含在应用或已安装的并行用户或计算机范围中。
- 支持的操作系统 (OS)、CPU 和应用程序方案会随着时间推移而增多。
- 命令行工具:可在命令行中执行所有产品方案。
- .NET 标准与 .NET Framework、Xamarin 和 Mono 兼容。
- .NET Foundation 项目。
- .NET Core 支持提供支持
.NET Core 包括以下部分:
- .NET 运行时:提供类型系统、程序集加载、垃圾回收器、本机互操作和其他基本服务。
- 框架库:提供基元数据类型、应用编写类型和基本实用程序。
- .NET Core SDK。
- 同一主机还可用于以大致相同的方式启动 SDK 工具。
语言
一般情况下,不会直接使用编译器,但会间接使用 SDK 工具。
OmniSharp 项目的高手提供。
.NET API 和兼容性
在某些情况下,类型未完全实现(某些成员不可用或已移动)。
.NET Core roadmap(.NET Core API 产品系列)。
与 .NET Standard 的关系
.NET 实现需要实现此规范才能被视为符合 .NET Standard ,并且才能支持面向 .NET Standard 的库。
由于 .NET Core 可实现 .NET Standard,因此也支持 .NET Standard 库。
工作负载
除 .NET Core 外,还生成了其他应用程序模型以扩展其功能,例如:
开放源
.NET Foundation Technical Steering Group(.NET Foundation 技术控制组)的成员,指导产品方向。
.NET Core 和 .NET Framework 的主要差异在于:
- 但 .NET Core 和 .NET Framework 两者都支持控制台和 ASP.NET Core 应用模型。
- .NET 标准 API,随着时间的推移,将包含更多 .NET Framework BCL API。
- 例如,不支持代码访问安全性 (CAS),但支持反射。
- 平台 -- .NET Framework 支持 Windows 和 Windows Server,而 NET Core 还支持 macOS 和 Linux。
- .NET Framework 的只读子集属于开放源。
.NET Core 和 Mono 的主要差异在于:
- 而 .NET Core 不支持这些内容。
- 大型子集。
- 平台 -- Mono 支持很多平台和 CPU。
- 开放源 -- Mono 和 .NET Core 两者都使用 MIT 许可证,且都属于 .NET Foundation 项目。
- 焦点 --最近几年,Mono 的主要焦点是移动平台,而 .NET Core 的焦点是云工作负荷。
EF Core 是轻量化、可扩展和跨平台版的 Entity Framework。