重点讲 Entity Framework Core !

(一)Entity Framework

它是适用于.NET 的对象关系映射程序 (ORM),现在的EF6已经是久经沙场,并经历重重磨难,获得一致认可的数据访问技术(原来加 Title 也挺有意思的,哈哈哈)。

作为 ORM,EF6 降低了关系方面和面向对象的方面之间的阻抗不匹配,使开发人员能够使用表示应用程序域的强类型 .NET 对象来编写应用程序,该应用程序可与存储在关系数据库中的数据交互,同时使开发人员无需再编写大部分的数据访问“管道”代码。这是微软官方吹牛逼的原话,但也很好理解。

那基于 EF6 可以实现很多 ORM 的热门的一些功能:

  • 不依赖于任何 EF 类型的 POCO (Plain Old CLR Object) 实体类的映射
  • 自动更改跟踪
  • 标识解析和工作单元
  • 预先、延迟和显式加载
  • 使用 LINQ(语言集成查询)转换强类型查询
  • 丰富的映射功能,可支持:
    • 一对一、一对多和多对多关系
    • 继承(每个层次结构一张表、每个类型一张表和每个具体类一张表)
    • 复杂类型
    • 存储过程
  • 通过可视化设计器创建实体模型。
  • 通过编写代码创建实体模型的“Code First”体验。
  • 既可从现有数据库生成模型,然后手动编辑,也可从头开始创建模型,然后用于生成新的数据库。
  • 与 .NET Framework 应用程序模型(包括 ASP.NET)集成,并通过数据绑定与 WPF 和 WinForms 集成。
  • 基于 ADO.NET 的数据库连接和可用于连接到 SQL Server、Oracle、MySQL、SQLite、PostgreSQL、DB2 等的众多提供程序。

相信很多人都使用过 VS 中 EF 设计器,我以前用得比较多,主要就是在项目中创建的:

  • 项目->添加新项...

  • 选择数据左侧的菜单,然后ADO.NET 实体数据模型;

  • 用生成的 Model 作为名称,然后单击确定;

  • 这将启动实体数据模型向导;

  • 选择从数据库生成单击下一步;

  • 选择连接到第一个部分中创建的数据库中,直接用生成的 LibraryEntities 作为名称的连接字符串和单击下一步;

  • 选择好实体框架 6.x ,下一步;

  • 再单击表导入的所有表并单击完成旁边的复选框,点击完成。

  • 反向工程过程完成后,新的模型就添加到了项目,并直接打开了实体框架设计器

那么现在已经创建完了实体模型。在创建的过程当中,已经帮我们建好了数据类型,生成了表的映射还有存储过程的映射,这贼爽了,点几下就搞定了,接着就可以进行增删改查了(具体怎么做,这里就不详解了)。

EF设计器中,我们同样可以操作表,更新表的字段,再通过正向工程,可以更新数据库中的表。

PS:使用 Code First 生成的实体,比EF设计器生成的要干净,但是也失去了正向工程的功能。

(二)Entity Framework Core

它是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。可用作对象关系映射程序 (ORM),以便于 .NET 开发人员能够使用 .NET 对象来处理数据库,这样就不必经常编写大部分数据访问代码了。

EF Core 则完全进行了重写,包含许多 EF6 没有的新功能,但还是缺少 EF6 中最高级的一些映射功能。

那如果要通过 VS 进行反向工程的话,需要安装 PMC 工具,而且这个工具是仅限于VS使用的。当然也还有一些非常棒的代码生成工具,比如 Code Smith。

使用PMC生成实体过程:

  • 打开VS的程序包管理控制台

  • 在程序包管理器控制台(PMC)工具中使用命令 Scaffold-DbContext 来进行反向工程。

    Scaffold - DbContext 'Data Source=.;Initial Catalog=Library;integrated security=true' Microsoft.EntityFrameworkCore.SqlServer

当出入命名直接回车后,会在项目的根目录下生成文件。当然,你也可以在 Scaffold-DbContext 命令中加入指定的生成路径等设置命令的。

这个跟用EF中用 Code First 生成文件是一个毛样的结果。下图就是 Code First 生成的。

当然,他们生成的代码还是有区别的。我们来看看 Scaffold-DbContext 命令生成的三个文件的代码:

1、LibraryContext.cs

    public partial class LibraryContext : DbContext{public LibraryContext(){}public LibraryContext(DbContextOptions<LibraryContext> options): base(options){}public virtual DbSet<Books> Books { get; set; }public virtual DbSet<Categories> Categories { get; set; }protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){if (!optionsBuilder.IsConfigured){optionsBuilder.UseSqlServer("Data Source=.;Initial Catalog=Library;integrated security=true");}}protected override void OnModelCreating(ModelBuilder modelBuilder){modelBuilder.HasAnnotation("ProductVersion", "2.2.3-servicing-35854");modelBuilder.Entity<Books>(entity =>{entity.ToTable("books");entity.Property(e => e.Id).HasColumnName("id").ValueGeneratedNever();entity.Property(e => e.Author).IsRequired().HasColumnName("author").HasMaxLength(50);entity.Property(e => e.Cateid).HasColumnName("cateid");entity.Property(e => e.Createtime).HasColumnName("createtime").HasColumnType("datetime");entity.Property(e => e.Isdel).HasColumnName("isdel");entity.Property(e => e.Name).IsRequired().HasColumnName("name").HasMaxLength(50);entity.HasOne(d => d.Cate).WithMany(p => p.Books).HasForeignKey(d => d.Cateid).OnDelete(DeleteBehavior.ClientSetNull).HasConstraintName("FK_books_categories");});modelBuilder.Entity<Categories>(entity =>{entity.ToTable("categories");entity.Property(e => e.Id).HasColumnName("id").ValueGeneratedNever();entity.Property(e => e.Cascadeid).IsRequired().HasColumnName("cascadeid").HasMaxLength(20);entity.Property(e => e.Createtime).HasColumnName("createtime").HasColumnType("datetime");entity.Property(e => e.Fid).HasColumnName("fid");entity.Property(e => e.Isdel).HasColumnName("isdel");entity.Property(e => e.Name).IsRequired().HasColumnName("name").HasMaxLength(50);});}}

2、Categories.cs

    public partial class Categories{public Categories(){Books = new HashSet<Books>();}public int Id { get; set; }public int Fid { get; set; }public string Name { get; set; }public string Cascadeid { get; set; }public DateTime Createtime { get; set; }public bool Isdel { get; set; }public virtual ICollection<Books> Books { get; set; }}

3、Books.cs

    public partial class Books{public int Id { get; set; }public int Cateid { get; set; }public string Name { get; set; }public string Author { get; set; }public DateTime Createtime { get; set; }public bool Isdel { get; set; }public virtual Categories Cate { get; set; }}

通过上面可以看到,它们已经生成好了映射。但是,如果要映射存储过程的话,EF Core 是不支持的。

(三)它们的区别

EF Core 提供了在 EF6 中不会实现的新功能(如备选键、批量更新以及 LINQ 查询中的混合客户端/数据库评估。 但由于它是一个新代码库,所以会缺少一些 EF6 中的功能。这也是正常的,但是它还在不断的完善!

EF Core 是更现代、可扩展的轻量级实体框架版本,与 EF6 的功能和优点非常相似。如果功能与需求都匹配的话,可以优先考虑使用 EF Core 的。至少性能摆在那里!

下面引用官方的图片,展示它们在功能上的比较:

转载于:https://www.cnblogs.com/Vam8023/p/10778511.html

.net core Entity Framework 与 EF Core相关推荐

  1. EF(Entity Framework、EF Core)

    学习EF的前提: 熟悉Linq和ADO.Net, 熟悉委托和Lamdba 在使用EF框架进行开发时,我们大多情况使用Linq进行数据查询和操作,而EF底层实现是用ADO.Net进行封装的 EF框架其实 ...

  2. 手把手引进门之 ASP.NET Core Entity Framework Core(官方教程翻译版 版本3.2.5)

    以下是手把手引进门教程,基于 ASP.NET Core, Entity Framework Core ,ABP 框架 创建Web 应用, PS: 自带自动的测试模块哦. 样例下载 (上 github  ...

  3. abp mysql .net core_ABP .Net Core Entity Framework迁移使用MySql数据库

    一.迁移说明 ABP模板项目Entity Framework Core默认使用的是Sql Server,也很容易将数据库迁移到MySQL,步骤如下. 二.迁移MySQL步骤 1. 下载项目 请到 ht ...

  4. ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门

    ASP.NET Core 入门教程 8.ASP.NET Core + Entity Framework Core 数据访问入门 原文:ASP.NET Core 入门教程 8.ASP.NET Core ...

  5. 使用 ASP.NET Core, Entity Framework Core 和 ABP 创建N层Web应用 第二篇

    介绍 这是"使用 ASP.NET Core ,Entity Framework Core 和 ASP.NET Boilerplate 创建N层 Web 应用"系列文章的第二篇.以下 ...

  6. 尝试.Net Core—使用.Net Core + Entity FrameWork Core构建WebAPI(一)

    想尝试.Net Core很久了,一直没有时间,今天回家,抛开一切,先搭建一个.Net Core的Demo出来玩玩. 废话少说,咱直奔主题: 一.开发环境 VS2015 Update3 Microsof ...

  7. ABP .Net Core Entity Framework迁移使用MySql数据库

    一.迁移说明 ABP模板项目Entity Framework Core默认使用的是Sql Server,也很容易将数据库迁移到MySQL,步骤如下. 二.迁移MySQL步骤 1. 下载项目 请到 ht ...

  8. abp.net mysql_ABP .Net Core Entity Framework迁移使用MySql数据库

    一.迁移说明 ABP模板项目Entity Framework Core默认使用的是Sql Server,也很容易将数据库迁移到MySQL,步骤如下. 二.迁移MySQL步骤 1. 下载项目 请到 ht ...

  9. 在.NET Core类库中使用EF Core迁移数据库到SQL Server

    前言 如果大家刚使用EntityFramework Core作为ORM框架的话,想必都会遇到数据库迁移的一些问题. 起初我是在ASP.NET Core的Web项目中进行的,但后来发现放在此处并不是很合 ...

最新文章

  1. php 打开动态链接,php调用com组件-dll文件(动态链接库)
  2. hung-yi lee_p15_机器学习深层网络比浅层网络好在哪
  3. OSPF有五种报文,hello,dd,lsr,lsu,lsack
  4. arXiv论文如何一键链接解读视频,这个浏览器扩展帮你实现
  5. 右键用 pycharm打开
  6. free和top显示可用内存不一致
  7. 程序设计入门-C语言基础知识-翁恺-第六周:数组-详细笔记(六)
  8. python 地址_python 解析地址 | 学步园
  9. 部署redis主从复制
  10. 怎么把php网站变灰,CSS效果,让网站全部变成灰色(黑白)
  11. Linux内核无法放到Ubuntu中,无法通过Linux内核模块(Ubuntu)在内核内存中写入
  12. python图片转动漫_python实现了照片转化为动漫模式
  13. java mvp模式_MVP模式入门(结合Rxjava,Retrofit)
  14. hadoop无法启动DataNode问题
  15. 抖音短视频抖音搜索seo排名优化技术引流工具源代码开发
  16. 档案管理制度计算机管理制度,计算机管理档案制度
  17. c语言多个大写变小写字母,c语言大写字母转换成小写字母
  18. 乐森 扫地机器人_扫地机器人到底好用不好用?
  19. java罗马帝国下载,Java程序设计2020满分完整版考 试题库大全
  20. 阿里数据仓库架构与模型设计

热门文章

  1. Eclipse反编译插件: Jodeclipse与JadClipse
  2. C#3.0 为我们带来什么(5) —— 匿名类型
  3. 工信部发布新能源车准入新规 9月1日起正式实施
  4. 五种计算机编程语言注定要衰落,牛逼的你怎么看呢???
  5. mysql有没有批量游标_MySQL使用游标批量处理进行表操作_MySQL
  6. 操作系统常用调度算法
  7. 如何创建一张表mysql_如何创建一张规范的MySQL表
  8. 模板格式丢失_公司法人私章证明丢失应该怎么办,需要补办吗?
  9. ftp 服务器的目录文件是否存在,ftp服务器的目录文件是否存在
  10. mysql忘记密麻麻_mysql忘记密码怎么办