
Entity FrameWork详解
文章平均质量分 68
Entity FrameWork详解
sinolover
完成项目,就要软硬兼施
展开
-
【转】EntityFramework使用Code First模式创建数据库控制生成单数形式的表名
使用Code-First模式生成数据库时,默认生成的数据库表的名称为类型的复数形式,例如实体类名称是"User",默认生成的数据库表名为“Users”,多数情况下我们并不想生成的数据库表名为复数形式,那么应该如何来控制呢?当我们想要自定义一些数据库表的生成规则的时候,会重写OnModelCreating()方法,控制生成的表名的单复数形式同样可以在这个方法中完成,实现代码如下: 1 using System; 2 using System.Collections.Generic; 3 usin原创 2021-01-19 10:53:13 · 202 阅读 · 0 评论 -
【转】ADO.Net之SqlConnection、 Sqlcommand的应用学习心得(思维导图,知识解析,案例分析)
ADO.Net之SqlConnection、Sqlcommand的应用一、思维导图:ADO.NET与SQL连接:二、知识点介绍:SqlConnection和Sqlcommand都是组成数据提供程序的类。SqlConnection使用它来建立和数据库的连接,Sqlcommand使用它执行SQL命令和存储过程。ADO.NET有两种类型的对象:基于连接的和基于内容的,SqlConnection和Sqlcommand属于基于连接的,它们连接到数据库,执行SQL语句,...原创 2020-12-07 09:08:40 · 478 阅读 · 0 评论 -
【转】学习Entity Framework 中的Code First
这是上周就写好的文章,是在公司浩哥的建议下写的,本来是部门里面分享求创新用的,这里贴出来分享给大家。 最近在对MVC的学习过程中,接触到了Code First这种新的设计模式,感觉很新颖,并且也体验到了这种方式所带来的便利。这里将我的一些理解分享出来。需要了解的概念 POCO POCO(Plain Old CLR Object)的概念是从java的POJO借用而来,而两者的含义是一致的,不同的仅仅是使用的语言不一样。所以POCO的解释就是“Plain Old C# Object.原创 2020-08-19 07:56:37 · 706 阅读 · 0 评论 -
【转】EF三种编程方式的区别Database first ,Model first ,code first
首先对于EF中先出现的datebase first和model first两种编程方式,其的区别根据字面意思很容易能够理解。datebase first就是代表数据库优先,那么前提就是先创建数据库。model first就是代表model优先,那么前提也就是先创建model,然后根据model自动建立数据库。这两EF的编程方式在使用的过程中的区别为:在添加ADO.NET实体数据模型的时候,database first选择的是从数据库生成。并且在数据结构发生变化的时候,data...原创 2020-08-19 07:55:10 · 811 阅读 · 0 评论 -
第二十三节: EF性能篇(三)之基于开源组件 Z.EntityFrameWork.Plus.EF6解决EF性能问题
一. 开篇说明 EF的性能问题一直以来经常被人所吐槽,究其原因在于“复杂的操作在生成SQL阶段耗时长,且执行效率不高”,但并不是没有办法解决,从EF本身举几个简单的优化例子: ①:如果仅是查询数据,并不对数据进行增、删、改操作,查询数据的时候可以取消状态追踪。 db.TestInfor.AsNoTracking().FirstOrDefault(); ②:用什么查什...原创 2020-02-15 15:35:12 · 1808 阅读 · 0 评论 -
第二十二节: 以SQLServer为例介绍数据库自有的锁机制(共享锁、更新锁、排它锁等)和事务隔离级别 :
一. 基本概念1.共享锁:(holdlock) (1). select的时候会自动加上共享锁,该条语句执行完,共享锁立即释放,与事务是否提交没有关系。 (2). 显式通过添加(holdlock)来显式添加共享锁(比如给select语句显式添加共享锁),当在事务里的时候,需要事务结束,该共享锁才能释放。 (3). 同一资源,共享锁和排它锁不能共存,意味着update之前必须等资源上的...原创 2020-02-13 14:35:46 · 1168 阅读 · 1 评论 -
第二十一节:ADO层次上的海量数据处理方案(SqlBulkCopy类插入和更新)
一. 简介1. 背景: 虽然前面EF的扩展插件Z.EntityFramework.Extensions,性能很快,而且也很方便,但是该插件要收费,使用免费版本的话,需要定期更新,如果不更新,将失效,非常麻烦,这个时候SqlBulkCopy类既免费又高效,显得非常合适了。2. 使用步骤: ①. 引入命名空间:using System.Data.SqlClient; ②....原创 2020-02-13 14:35:39 · 408 阅读 · 0 评论 -
第二十节: 深入理解并发机制以及解决方案(锁机制、EF自有机制、队列模式等)
一. 理解并发机制1. 什么是并发,并发与多线程有什么关系?①. 先从广义上来说,或者从实际场景上来说. 高并发通常是海量用户同时访问(比如:12306买票、淘宝的双十一抢购),如果把一个用户看做一个线程的话那么并发可以理解成多线程同时访问,高并发即海量线程同时访问。 (ps:我们在这里模拟高并发可以for循环多个线程即可)②.从代码或数据的层次上来说. 多个...原创 2020-02-13 14:35:29 · 546 阅读 · 0 评论 -
第十九节: 结合【表达式目录树】来封装EF的BaseDal层的方法
一. 简介 该章节,可以说是一个简单轻松的章节,只要你对Expression表达式树、EF的基本使用、泛型有所了解,那么本章节实质上就是一个非常简单的封装章节,便于我们快捷开发。 PS:在该章节对于EF的上下文怎么处理,怎么来的,不做介绍,在后续的框架篇将详细介绍,下面的EF上下文,将直接使用db代替。 如果你对Expression、EF的增删改查、泛型生疏的话,可以先阅读以下章节...原创 2020-02-13 14:35:21 · 344 阅读 · 0 评论 -
第十七节: EF的CodeFirst模式的四种初始化策略和通过Migration进行数据的迁移
一. 四种初始化策略 EF的CodeFirst模式下数据库的初始化有四种策略: 1. CreateDatabaseIfNotExists:EF的默认策略,数据库不存在,生成数据库;一旦model发生变化,抛异常,提示走数据迁移 2. DropCreateDatabaseIfModelChanges:一旦model发生变化,删除数据库重新生成 3. DropCreate...原创 2020-02-13 14:35:10 · 913 阅读 · 0 评论 -
第十六节: EF的CodeFirst模式通过Fluent API修改默认协定
一. 简介1. 优先级:Fluent API > data annotations > default conventions.2. 所有的Fluent API配置都要在 OnModelCreating这个重写方法中进行3. 常见的配置: ① 获取表对应的配置根: var stu =modelBuilder.Entity<XXX>(); ②...原创 2020-02-13 14:35:01 · 292 阅读 · 0 评论 -
第十四节: EF的三种模式(四) 之 原生正宗的 CodeFirst模式的默认约定
一. 简介1. 正宗的CodeFirst模式是不含有edmx模型,需要手动创建实体、创建EF上下文,然后生成通过代码来自动映射生成数据库。2. 旨在:忘记SQL、忘记数据库。3. 三类配置:One To One(one-to-zero-or-one)、One To Many、Many To Many。注意:在该模块使用最简单的模式配置这三种关系,暂时先不考虑DataAnnot...原创 2020-02-13 14:34:42 · 411 阅读 · 0 评论 -
第十五节: EF的CodeFirst模式通过DataAnnotations修改默认协定
一. 简介1. DataAnnotations说明:EF提供以特性的方式添加到 domain classes上,其中包括两类: A:System.ComponentModel.DataAnnotations命名空间下的特性是表中列的属性的。 包括:Key、Required、MinLength和MaxLength、StringLength、Timestamp、Concurren...原创 2020-02-13 14:34:50 · 458 阅读 · 0 评论 -
第十三节: EF的三种模式(三) 之 来自数据库的CodeFirst模式
一. 简介 【来自数据库的Code First模式】实质上并不是CodeFirst模式,而是DBFirst模式的轻量级版本,在该模式中取消了edmx模型和T4模板,直接生成了EF上下文和相应的类,该模式出现在VS2015版本以后。 该模式也是适用于数据库已经设计建好的情况。 生成的上下文和类库如下:二. 使用介绍 使用方法除了,选择模式的不一致,其...原创 2020-02-13 14:34:33 · 450 阅读 · 0 评论 -
第十二节: EF的三种模式(二) 之 ModelFirst模式(SQLServer为例)
一. 简介 顾名思义,ModelFirst是模型优先,是DBFirst的逆向模式,先建立实体数据模型,然后根据实体数据模型来生成数据库,从而驱动整个开发流程.(生成一个空的edmx文件,手动在里面建立实体模型)(1). 优点:符合当前流行的面向领域驱动设计的开发模式,可以用设计建模的思维来进行代码开发,符合面向对象的编程思想.(2). 缺点:当实体需要改变的时候,需要重新映射生...原创 2020-02-13 14:34:16 · 349 阅读 · 0 评论 -
第十一节: EF的三种模式(一) 之 DBFirst模式(SQLServer和MySQL两套方案)
一. 简介 EF连接数据库有三种模式,分别是DBFirst、ModelFirst、CodeFirst,分别适用于不同的开发场景。 该章节,将主要介绍EF的DBFirst连接SQLServer数据库和MySql数据库两种操作方式 该模式在EF中出现的出现的最早,符合我们的传统开发模式,先设计数据库→然后在代码通过EF与数据库建立映射关系,是EF最早的一种使用方式,使用广泛.以数据...原创 2020-02-12 14:58:41 · 2640 阅读 · 0 评论 -
第十节: EF的三种追踪实体状态变化方式(DBEntityEntry、ChangeTracker、Local)
一. 简介 我们在前面章节介绍EF基本增删改的时候,曾说过EF的SaveChanges()方法,会一次性的将所有的实体的状态变化统一提交到数据库,那么你是否想过EF的实体会有哪些状态变化呢?什么原因会导致其变化呢?我们怎么来追踪EF的实体变化呢?本章节以追踪EF实体状态变化的三种方式为线索,一一介绍上面疑问。 废不多说,还是先把整理的结论贴出来,然后配合代码来介绍。1. EF的...原创 2020-02-12 14:58:10 · 1426 阅读 · 0 评论 -
第九节: EF的性能篇(二) 之 Z.EntityFramework.Extensions程序集解决EF的性能问题
一. 综述 该模块主要介绍:EF的性能优化插件Z.EntityFramework.Extensions,该插件收费。(一). 简介1. 相关网站:http://www.zzzprojects.com/2. 下载途径:通过Nuget直接下载或者去官网下载(要注意更新最新版本,可能会过期)3. 该程序集包括三个核心模块:Bulk SaveChanges、Bulk Operatio...原创 2020-02-12 14:57:38 · 1148 阅读 · 0 评论 -
第八节: EF的性能篇(一) 之 EF自有方法的性能测试
一. 开发中常见的性能问题 我们在日常开发过程中,由于一些不好的习惯,经常会导致所写的代码性能低下,却毫无发觉,下面就总结一下常见的一些性能问题。1. 真假分页 ① 假分页:db.xxx.toList().Skip(2).take(4) 。 ② 真分页:db.xxx.Skip(2).take(3).toList() 。2. 合理的使用EF的数据加载方式 EF...原创 2020-02-12 14:57:04 · 1031 阅读 · 0 评论 -
第七节: EF的三种事务的应用场景和各自注意的问题(SaveChanges、DBContextTransaction、TransactionScope)
一. 什么是事务 我们通俗的理解事务就是一系列操作要么全部成功、要么全部失败(不可能存在部分成功,部分失败的情况)。 举一个事务在我们日常生活中的经典例子:两张银行卡(甲、乙),甲向乙转钱,整个过程需要执行两个操作,甲账户钱减少,乙账户钱增加,这是转账成功的情况;转账失败时候,二者均不执行,甲乙账户钱都不变。1. SQLServer中的事务 SQLServer中的事务具体...原创 2020-02-12 14:56:33 · 2196 阅读 · 0 评论 -
第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性)
一. 简介 上一个章节中,也介绍了立即加载和延迟加载,但上一个章节是针对单表而言的,不含外键,立即也好,延迟也好,都是指单表中的数据。但本章节重点介绍的三种加载方式均是针对含(导航属性、外键)的情况下,查询主表,从表中的数据加载情况。 下面准备两张表:Student和StudentAddress两张表,一对一 or 零 的关系,实体结构如下,通过CodeFirst来反向生成数据库。...原创 2020-02-12 14:55:48 · 785 阅读 · 0 评论 -
第五节: EF高级属性(一) 之 本地缓存、立即加载、延迟加载(不含导航属性)
一. 本地缓存 从这个章节开始,介绍一下EF的一些高级特性,这里介绍的首先介绍的EF的本地缓存,在前面的“EF增删改”章节中介绍过该特性(SaveChanges一次性会作用于本地缓存中所有的状态的变化),在这里介绍一下本地缓存的另外一个用途。 ① Find方法通过主键查询数据,主键相同的查询,只有第一次访问数据库,其它均从缓存中读取。 ② 延迟加载的数据,在第一次使用的使用时访...原创 2020-02-12 14:53:24 · 661 阅读 · 1 评论 -
第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法
一. 背景 上一个章节,介绍了EF调用两类SQL语句,主要是借助 ExecuteSqlCommand和 SqlQuery 两个方法来完成,在本章节主要是复习几类存储过程的写法和对应的EF调用这几类存储过程的写法,另外介绍EF的DBFirst模式的下EF存储过程的特有写法。 本章要达到以下几个目标: ① 熟练掌握存储过程的相关概念和几类写法(去复习) ② EF各种模式调...原创 2020-02-12 14:52:50 · 411 阅读 · 0 评论 -
第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery )
一. 前言 在前面的两个章节中,我们分别详细介绍了EF的增删改的两种方式(方法和状态)和EF查询的两种方式( Lambda和Linq ),进行到这里,可以说对于EF,已经入门了,本来应该继续往下进行EF的高级属性,但本章节要打断一下,俗话所得好,“做人不能忘本”,应用到开发领域,就是“编码也不能忘本”,我们原始的SQL语句,在本章节将结合EF的调用,进行复习一番。 本章节我们要达到的...原创 2020-02-12 14:52:13 · 1293 阅读 · 0 评论 -
第二节: 比较EF的Lambda查询和Linq查询写法的区别
简介 在前面EF的介绍中,曾多次提到过EF可以使用Lambda和Linq来完成对数据库的访问,这两种的语法的具体使用和注意事项在前面的DotNet进阶的系列章节中已经详细介绍过了,本次借着EF章节,重新调整了一下里面的规范和注意事项。1. Lambda语法七类核心用法:0. Select最基本的用法:查询单表中所有数据1. Where的用法:单条件、多条件、模糊查询...原创 2020-02-12 14:51:10 · 585 阅读 · 0 评论 -
第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式
一. 背景 说起EF的增删改操作,相信很多人都会说,有两种方式:① 通过方法操作 和 ② 通过状态控制。 相信你在使用EF进行删除或修改操作的时候,可能会遇到以下错误:“The object cannot be deleted because it was not found in the ObjectStateManager”,通过百度查询,说是没有进行上下文的附加,需要at...原创 2020-02-11 09:12:09 · 582 阅读 · 2 评论 -
ORM系列之Entity FrameWork详解
一. 谈情怀 从第一次接触开发到现在(2018年),大约有六年时间了,最初阶段连接数据库,使用的是【SQL语句+ADO.NET】,那时候,什么存储过程、什么事务 统统不理解,生硬的将SQL语句传入SQLHelper类中,后来知道还要注意SQL注入,引入参数化的方式,现在回想一下,那个阶段简直Low到爆。 (PS:现在很多场景下还是需要使用ADO.NET,所以没有最好,只有最适合)...原创 2020-02-11 09:25:02 · 329 阅读 · 0 评论 -
【转】ORM系列之Entity FrameWork详解
一. 谈情怀 从第一次接触开发到现在(2018年),大约有六年时间了,最初阶段连接数据库,使用的是【SQL语句+ADO.NET】,那时候,什么存储过程、什么事务 统统不理解,生硬的将SQL语句传入SQLHelper类中,后来知道还要注意SQL注入,引入参数化的方式,现在回想一下,那个阶段简直Low到爆。 (PS:现在很多场景下还是需要使用ADO.NET,所以没有最好,只有最适合)...原创 2020-01-02 13:57:29 · 277 阅读 · 0 评论