1、为什么使用ef core?

  市面上orm框架那么多,为何偏偏选择ef,dapper那么好用,性能碾压ef,为什么使用dapper?

  对于这个问题我记得当初一个老师讲entityframework的时候讲过这么一个故事:

    1)一个公司的老板让开发部开发一个软件,一开始的数据库的技术栈:ado.net,当项目真正要用的时候,老板发现sqlserver的费用让他有点不情愿,同样是数据库人家mysql为什么不要钱,所以勒令开发部把数据库换成mysql,从中省下来的钱一部分作为奖金(呵呵哒~),开发部的人当时听了可以啊,有奖金拿,必须换啊,随之而来的是无尽的痛苦,各种语句专属语句不兼容,改了一个星期,勉勉强强能跑了,人累的够呛,项目跑起来后,各种问题随之而来,然而公司并没有熟悉mysql的DBA,运行一周后实在是搞不定了,老板最后决定还是换回sqlserver,又是各种改sql,最后改到人人想吐。

    2)同样尴尬的事儿也在另一个公司发生,但是这个公司的开发者幸福得多,技术栈选了ef,虽然中间也填了很多坑,但是逃过了改sql的命运,老板让从sqlserver 换到 mysql ,开发部要求一周的时间,其实两分钟就ok的事儿,仅仅是替换数据库仅仅换一下连接字符串跟provider(理想情况下是这样的),其余的时间就该他们happy了....。

  当然很多人会说,数据库是一开始就计划好的谁会没事儿换着玩儿,故事始终是故事,我需要的是性能,我就是推崇dapper,好吧,萝卜白菜各有所爱,愿ef越来越好,愿.net越来越好。

2、ef core实践

  1、开发工具vs code,为什么不用visual studio,宇宙第一IDE,工作中真的可以帮助我们省很多事儿,但是个人练习还是建议不用那么好的IDE,少的自动化,多点手动,记忆更加清晰。

  2、本次使用.net core 2.1+ef core 2.1

  3、使用dotnet tools 创建项目:dotnet new console -o EFCoreTest

  4、加入ef core 的依赖:dotnet add package Microsoft.EntityFrameworkCore,加入对应数据库的实现:dotnet add package Microsoft.EntityFrameworkCore.Sqlite(这里用sqlite,数据库比较轻量级),加入ef的tools:dotnet add package Microsoft.EntityFrameworkCore.Tools、Microsoft.EntityFrameworkCore.Tools.DotNet,.net core 中用都是用 json 作为配置文件,所以加入Json的Configuration,dotnet add package Microsoft.Extensions.Configuration、Microsoft.Extensions.Configuration.Json;

  5、编写DbContext代码如下:

appsetting.json: 

{
  "ConnectionStrings":{
    "SqliteConnectionString":"data source=efcore.db;"
  }
}

  6、编写model,随意写一个User类

  7、创建一个迁移:dotnet ef migrations add userinit,更新数据库:dotnet ef database update;

  8、使用ef,新增、编辑、查询数据

  9、基本完成,现在出现个情况我们需要在user类中添加一个字段,该如何实现

    1)、在user类中添加想要的字段;

    2)、创建添加字段的迁移:dotnet ef migrations add UserAddCol,更新数据库:dotnet ef database update;

  10、然后继续运行程序即可。

  11、创建的迁移还可以生成脚本文件:dotnet ef migrations script,默认是从迁移的第一步开始,也可指定如:dotnet ef migrations UserInit UserAddCol -o scripts/2018年06月03日.sql

后记:

  1、ef 简单操作还是非常爽的,减少了很多数据库基本操作

  2、code first 使用migrations实现创建数据库,添加字段等等

  3、官方中文文档

ef core 相关的更多相关文章

  1. EF Core 相关的千倍性能之差: AutoMapper ProjectTo VS Mapster ProjectToType

    在前两天遇到 .NET Core 中 EF Core 的异步与同步查询的百倍性能之差(详情之前的博文)之后,这两天又遇到了 AutoMapper ProjectTo<T> 与 Mapste ...

  2. asp.net core+ef core

    asp.net core+ef core 官方的文档https://docs.asp.net/en/latest/tutorials/first-mvc-app/start-mvc.html 先来看一 ...

  3. .Net Core2.2 + EF Core + DI,三层框架项目搭建教程

    笔记: 近两年.Net Core发展的很快,目前最新版为3.0预览版,之前在网上买了一本1.1版书籍都还没来得及看呢,估计现在拿出来看也毫无意义了.已多年.net工作经验,看书不如直接实际上手来得快, ...

  4. 在vs2015上使用asp.net core+ef core

    官方的文档https://docs.asp.net/en/latest/tutorials/first-mvc-app/start-mvc.html 先来看一下实现的效果

  5. EF Core 的 Code First 模式

    0 前言 本文正文第一节,会对 Code First 进行基本的介绍,以及对相关名词进行说明,读者一开始可以不用在这里消耗过多时间,可以先操作一遍例子,再回过头理解. 第二节,以一个简单的例子,展示 ...

  6. [翻译 EF Core in Action 2.4] 加载相关数据

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

  7. 第三节:EF Core上下文DbContext相关配置和生命周期

    一. 配置相关 1. 数据库连接字符串的写法 (1).账号密码:Server=localhost;Database=EFDB01;User ID=sa;Password=123456; (2).win ...

  8. Asp.net Core 通过 Ef Core 访问、管理Mysql

    本文地址:http://www.cnblogs.com/likeli/p/5910524.html 环境 dotnet Core版本:1.0.0-preview2-003131 本文分为Window环 ...

  9. EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)

    官方文档英文地址:https://github.com/aspnet/EntityFramework/wiki/Roadmap 历经延期和更名,新版本的实体框架终于要和大家见面了,虽然还有点害羞.请大 ...

随机推荐

  1. vue axios跨域

    现在应用都是前后端分离,这也造成前端在调用接口时出现跨域问题,在控制台会这样提示 ,如果有类似于此图的提示,就已经表明你的接口调用出现了跨域问题,此文章是我对于vue跨域其中一种方式的一些经验,如果错 ...

  2. python--第二十天总结(Django的一些注意)

    关闭Django模板的自动转义 Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全.但是有的时候我们可能不希望这些HTML元素 被转义,比如我们做一个内容管 ...

  3. web前端面试题题目

    一.各种浏览器兼容的前缀:-o-(Opera),-ms-(IE): -moz-(火狐):-webkit-(chrome) 二.存在兼容性的css属性:placeholder,主要是因为各种浏览器pla ...

  4. 关于@JsonIgnore的理解

    首先:@JsonIgnore是一个能够在后端发送给前端数据的时候对后端发送出的json字符串能够发挥作用的一个注解 如果比如user表,你在password这个属性上添加@JsonIgnore,就会s ...

  5. 关于webservlet 请求异步处理,链接未关闭出现的bug

    webservlet  +redis 的消息发布订阅 ,挺好的 当请求到来,向redis server申请一个频道 ,然后等着另一端架设是B 处理完毕获得到处理信息调用redis ,使用redis 往 ...

  6. Mnist

    Mnist 先贴一个介绍的很好的博客 https://blog.csdn.net/sysushui/article/details/53257185 mnist是一个手写体数字的数据集.上图是数据集的 ...

  7. dskinlite(uieasy mfc界面库)使用记录4:绘制动态元素(listbox)

    效果图: XML代码: 299行的headerctrl只针对listview有效,这里是listbox,忽略 wirelessName,wirelessStatus,wirelessSignal会通过 ...

  8. python基础之Day14

    一.生成器 1.什么是生成器 在函数内但凡出现yield关键字,再调用函数就不会执行函数体代码,会返回一个值,该值称之为生成器,生成器本质就是迭代器 2.为什么要有生成器 生成器是一种自定义迭代器的方 ...

  9. 20170506计划-----(基于python查询oracle语句)

    在日常的工作中,经常接到开发同事查询生产SQL的请求,公司又不允许对开发开放查询SQL的权限,并且查询的堡垒机又很慢,计划做一个可以自动查询SQL的小工具,一周内完成吧. 大概功能实现了,一些涉及敏感 ...

  10. AX_xSession

    Session  xSession = new xSession();  ;  xSession.userId();