概念git
EF Core 全称是Entity Framework Core,可以使用 EF Core 开发面向 .NET Core 的应用,EF Core 同时支持在 Visual StudioVisual Studio for Mac 或 Visual Studio Code 等环境下开发。虽然EF CORO 一样支持在Xamarin和.Net Native 上实现运行,可是存在运行限制,可能会影响EF Core处理的效率,暂不推荐使用。github
技术大纲sql
Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的经常使用 Entity Framework 数据访问技术。数据库
EF Core 可用做对象关系映射程序 (O/RM),这能够实现如下两点:编程
EF Core 支持多个数据库引擎。缓存
举例:安装或更新 EF Core SQL Server 的途径安全
三种途径服务器
NET Core CLI (控制台命令行操做页面可执行)架构
Visual Studio NuGet 包管理器对话框并发
Visual Studio NuGet 包管理器控制台
模型
对于 EF Core,使用模型执行数据访问。 模型由实体类和表示数据库会话的上下文对象DBContext构成。 上下文对象容许查询并保存数据。
EF 支持如下模型开发方法:
DbContext是实体类和数据库之间的桥梁,DbContext主要负责与数据交互,主要做用:
DbSet<TEntity>
】以下图所示
DBContext 是一个实现上述功能,天然类体积较大,截取部分方法展现以下:
以下展现一段代码以便更好理解:
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=Blogging;Integrated Security=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) 从数据库检索实体类的实例。其中,where 和 Orderby 两个方法并不执行数据库操做 这里重点说明一下,只有ToList 这个操做,才会真正去数据库执行查询。
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(); }
虽然 EF Core 善长提取许多编程详细信息,但仍是有一些适用于任何 O/RM 的最佳作法,可帮助避免生产应用中的常见陷阱:
功能和集成测试:请务必尽量严密地复制生产环境,以便:
生成的迁移的详细检查和测试。 将迁移应用于生产数据前,应对其进行全面测试。 若表中包含生产数据,架构的形状和列类型就不能轻易更改。 例如,在 SQL Server 上,对于映射到字符串和十进制属性的列,nvarchar(max) 和 decimal(18, 2) 极少成为最佳类型,但这些是 EF 使用的默认值,由于 EF 不了解你的具体状况。
~~~~