EF 学习笔记

原创 2016年08月31日 08:15:19

EF 学习笔记

2013614

14:14

 

 

EF在什么时候打开数据库连接

在如下时候会打开数据库连接:

  • SaveChanges or Refresh on ObjectContext.
  • FirstOrDefault, or First on ObjectQuery.
  • Load on EntityCollection.
  • Load on EntityReference.
  • Any Language-Integrated Query (LINQ) method or ObjectQuery query builder method, such as Where, OrderBy, or Select.

 

 

什么时候关闭连接()

  • 当数据库返回数据以后,
  • 如果该数据已经被使用,或者被销毁,EF就会关闭数据库连接
  • EF对象被销毁的时候
  • 这个地方没有得到具体资料,实际测试一个连接关闭的非常快,可能一两秒就会关闭

 

 

如何处理多个数据库查询

当在单线程的环境中,EF会自动reopen数据库连接进行查询。在多线程的环境中,其他的线程在使用EF进行连接时,可能这个连接还处于connecting/close状态下,这个时候会导致一个数据库连接错误。
 

 

用户如何控制数据库连接?

在创建EF实例之前就创建连接,并且制定不让EF管理连接,如下:

using (var connection = ...)

{

    using (var context = new TestDataContext(connection, false))

    {

        ...

    }

}

可以输入一个“contextOwnsConnection”参数,来禁止EF管理数据库连接。

 

当然,这不是EF推荐的方法,因此默认生成的Gaia2Entities是没有这个方法的

 

 

共用EF的最佳实践?

从上述的资料看起来,有如下一些结论:

  • EF管理数据库连接,除非对性能有特别的要求
  • 尽可能不长时间地保留EF对象,MS推荐的方式是用完就丢
  • 在多线程之间共享EF对象,为了安全,至少要加锁处理
  • 要减少数据库查询,可以缓存数据,但不是缓存EF对象

 

 

关于EFBug

Don'tReuse Context with Entity Framework Self Tracking Entities

 

 

使用Entity Framework 5的性能注意事项

投递人 itwriter 发布于2012-05-01 15:22 评论(3) 9364人阅读  原文链接  [收藏]  « »

虽然 Entity Framework (EF) 5 承诺带来了超越 EF4 的大幅性能提升,但为了更有效地使用 ORM,我们仍然需要关注一些注意事项——即视图生成、缓存、自动编译的查询、查询执行选项及设计时(Design Time)。

微软已经发布了一份白皮书,概述使用待发布的 Entity Framework 5(它将作为即将到来的 .NET 4.5的一部分发布)时应关注的各种性能注意事项。

以下是一些需要注意的地方:

  • 冷查询执行 vs. 暖查询执行(Cold-vs-Warm query execution)——视图生成这一步(用于从数据库模式到概念模式或从概念模式到数据模式的必要转换)会增加第一次运行查询时的开销,后续运行会因为视图缓存的缘故会更快一些。用户可以通过预生成视图来提升性能
  • 缓存——在对象层次(特别是结合禁用 AutoDetectChanges 改善 DbContext Find ()性能),可用的缓存有查询计划缓存(Query Plan Caching)、元数据缓存(MetaData Caching)及结果缓存(Results Caching)。EF 仍然没有提供二级缓存,不过我们可以参考一些指南进行实现——如 CodePlex 上的示例,以及 Julia Lerman 的文章“Entity Framework 与 Windows Azure 中的二级缓存”;
  • 可选的无跟踪查询(没有状态跟踪的开销)。目前该选项只对 ObjectQuery 可用,没法适用于 DbSet 及 DbQuery 类;
  • 微型 ORM 风格的快速查询,如数据库上执行 SQL 查询以及 ExecuteStoreQuery 
  • 设计时注意事项——每个层次对应一张表(Table-per-hierarchy,简称 TPHvs. 每个类型对应一张表(Table-per-Type,简称 TPTvs. 每个类对应一张表(Table-per-Class,简称 TPC);其中 TPT 在查询复杂度及性能方面表现最差;
  • 延迟加载 vs. 预先加载 (Lazy-vs-Eager loading)。

Entity Framework 是由微软提供的一款面向 .NET 应用程序的商业对象关系映射框架。除了 EF 之外,.NET开发人员还可以选择的一些(开源和商业包括在内)产品有 NHibernate LightSpeed。另外,还有一些轻量级的微型 ORM 模型像 Dapper.NETPetaPoco Massive

 

Pastedfrom <http://news.cnblogs.com/n/140931/>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

EF Code First 学习笔记:关系

一对多关系 项目中最常用到的就是一对多关系了。Code First对一对多关系也有着很好的支持。很多情况下我们都不需要特意的去配置,Code First就能通过一些引用属性、导航属性等检测到模型之间...

EF Code First 学习笔记:表映射

多个实体映射到一张表 Code First允许将多个实体映射到同一张表上,实体必须遵循如下规则: 实体必须是一对一关系实体必须共享一个公共键 观察下面两个实体: publi...

EF Code First 学习笔记:约定配置 Data Annotations+Fluent API

 要更改EF中的默认配置有两个方法,一个是用Data Annotations(在命名空间System.ComponentModel.DataAnnotations;),直接作用于类的...

EF Code First学习笔记 初识Code First C

Code First是Entity Framework提供的一种新的编程模型。通过Code First我们可以在还没有建立数据库的情况下就开始编码,然后通过代码来生成数据库。 下面通过一个简单的示...

EF学习笔记——通用增删改查方案

 我刚接触EF未久,还不知道它有什么强大之处,但看上去,EF提供了一般的增删改查功能。以往用过一些ORM方法,尽管有代码生成器,但代码量总的来说比较多。这次采用EF,我就想,能不能尽量写出一些通...

EF Code First学习笔记:数据库创建

控制数据库的位置 默认情况下,数据库是创建在localhost\SQLEXPRESS服务器上,并且默认的数据库名为命名空间+context类名,例如我们前面的BreakAway.BreakAwayC...

EntityFramework学习笔记-VS2010安装EF

如何在vs2010上安装EntityFramework? 首先,需要安装一个vs插件,名称为NuGet Package Manager,微软官方发布的,其作用就是为vs工程项目自动下载、安装...

EF学习笔记——生成自定义实体类

使用EF,实体类都是自动生成。如果要
  • leftfist
  • leftfist
  • 2014年05月03日 00:27
  • 12383

EF Code First 学习笔记:关系

一对多关系 项目中最常用到的就是一对多关系了。Code First对一对多关系也有着很好的支持。很多情况下我们都不需要特意的去配置,Code First就能通过一些引用属性、导航属性等检测到模型...

EF Code First 导航属性 与外键 学习笔记

一对多关系 项目中最常用到的就是一对多关系了。Code First对一对多关系也有着很好的支持。很多情况下我们都不需要特意的去配置,Code First就能通过一些引用属性、导航属性等检测到模型之间...
  • KZWRCOM
  • KZWRCOM
  • 2015年11月17日 11:33
  • 3588
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:EF 学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)