你必须知道的EF知识和经验

【转】你必须知道的EF知识和经验

注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式。

注意:以下内容如果没有特别申明,默认使用的EF6.0版本,codefirst模式。

【转】你必须知道的EF知识和经验,ef知识经验

【转】你必须知道的EF知识和经验

注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式。

注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式。

推荐MiniProfiler插件

工欲善其事,必先利其器。

我们使用EF和在很大程度提高了开发速度,不过随之带来的是很多性能低下的写法和生成不太高效的sql。

虽然我们可以使用SQL Server Profiler来监控执行的sql,不过个人觉得实属麻烦,每次需要打开、过滤、清除、关闭。

在这里强烈推荐一个插件MiniProfiler。实时监控页面请求对应执行的sql语句、执行时间。简单、方便、针对性强。

如图:(具体使用和介绍请移步)

图片 1

推荐MiniProfiler插件

工欲善其事,必先利其器。

我们使用EF和在很大程度提高了开发速度,不过随之带来的是很多性能低下的写法和生成不太高效的sql。

虽然我们可以使用SQL Server Profiler来监控执行的sql,不过个人觉得实属麻烦,每次需要打开、过滤、清除、关闭。

在这里强烈推荐一个插件MiniProfiler。实时监控页面请求对应执行的sql语句、执行时间。简单、方便、针对性强。

如图:(具体使用和介绍请移步)

图片 2

推荐MiniProfiler插件

工欲善其事,必先利其器。

我们使用EF和在很大程度提高了开发速度,不过随之带来的是很多性能低下的写法和生成不太高效的sql。

虽然我们可以使用SQL Server Profiler来监控执行的sql,不过个人觉得实属麻烦,每次需要打开、过滤、清除、关闭。

在这里强烈推荐一个插件MiniProfiler。实时监控页面请求对应执行的sql语句、执行时间。简单、方便、针对性强。

如图:(具体使用和介绍请移步)

推荐MiniProfiler插件

工欲善其事,必先利其器。

我们使用EF和在很大程度提高了开发速度,不过随之带来的是很多性能低下的写法和生成不太高效的sql。

虽然我们可以使用SQL Server Profiler来监控执行的sql,不过个人觉得实属麻烦,每次需要打开、过滤、清除、关闭。

在这里强烈推荐一个插件MiniProfiler。实时监控页面请求对应执行的sql语句、执行时间。简单、方便、针对性强。

如图:(具体使用和介绍请移步)

图片 3

数据准备

新建实体:Score(成绩分数表)、Student(学生表)、Teacher(老师表)

图片 4

后面会给出demo代码下载链接

数据准备

新建实体:Score、Student、Teacher

图片 5

后面会给出demo代码下载链接

数据准备

新建实体:Score(成绩分数表)、Student(学生表)、Teacher(老师表)

图片 6

后面会给出demo代码下载链接

数据准备

新建实体:Score(成绩分数表)、Student(学生表)、Teacher(老师表)

图片 7

后面会给出demo代码下载链接

foreach循环的陷进 

1.关于延迟加载

图片 8

请看上图红框。为什么StudentId有值,而Studet为null?因为使用code first,需要设置导航属性为virtual,才会加载延迟加载数据。

图片 9

2.关于在循环中访问导航属性的异常处理(接着上面,加上virtual后会报以下异常)

"已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。"

图片 10

解决方案:

  • 方案1、设定ConnectionString加上MultipleActiveResultSets=true,但只适用于SQL 2005以后的版本
  • 方案2、或者先读出放置在List中

3.以上两点仅为热身,我们说的陷阱才刚刚开始!

图片 11

然后我们点击打开MiniProfiler工具(不要被吓到)

图片 12

图片 13

解决方案:使用Include显示连接查询(注意:需要手动导入using System.Data.Entity 不然Include只能传表名字符串)。

图片 14

再看MiniProfiler的监控(瞬间101条sql变成了1条,这其中的性能可想而知。)

图片 15

foreach循环的陷进

1.关于延迟加载

图片 16

请看上图红框。为什么StudentId有值,而Studet为null?因为使用code first,需要设置导航属性为virtual,才会加载延迟加载数据。

图片 17

2.关于在循环中访问导航属性的异常处理(接着上面,加上virtual后会报以下异常)

"已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。"

图片 18

解决方案:

  • 方案1、设定ConnectionString加上MultipleActiveResultSets=true,但只适用于SQL 2005以后的版本
  • 方案2、或者先读出放置在List中

3.以上两点仅为热身,我们说的陷阱才刚刚开始!

图片 19

然后我们点击打开MiniProfiler工具(不要被吓到)

图片 20

图片 21

解决方案:使用Include显示连接查询(注意:需要手动导入using System.Data.Entity 不然Include只能传表名字符串)。

图片 22

再看MiniProfiler的监控(瞬间101条sql变成了1条,这其中的性能可想而知。)

图片 23

foreach循环的陷进 

1.关于延迟加载

图片 24

请看上图红框。为什么StudentId有值,而Studet为null?因为使用code first,需要设置导航属性为virtual,才会加载延迟加载数据。

图片 25

2.关于在循环中访问导航属性的异常处理(接着上面,加上virtual后会报以下异常)

"已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。"

图片 26

解决方案:

  • 方案1、设定ConnectionString加上MultipleActiveResultSets=true,但只适用于SQL 2005以后的版本
  • 方案2、或者先读出放置在List中

3.以上两点仅为热身,我们说的陷阱才刚刚开始!

图片 27

然后我们点击打开MiniProfiler工具(不要被吓到)

图片 28

图片 29

解决方案:使用Include显示连接查询(注意:需要手动导入using System.Data.Entity 不然Include只能传表名字符串)。

图片 30

再看MiniProfiler的监控(瞬间101条sql变成了1条,这其中的性能可想而知。)

图片 31

本文由糖果派对电玩城发布于用户反馈,转载请注明出处:你必须知道的EF知识和经验

您可能还会对下面的文章感兴趣: