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/>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

一起学ASP.NET Core 2.0学习笔记(二)- ef core2.0 及mysql provider 、Fluent API相关配置及迁移

不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx、superviso...
  • daye5465
  • daye5465
  • 2017年08月31日 12:53
  • 2726

EF学习笔记

data first 时如何修改EF自动生成的model,而不用担心会因重新生成而覆盖修改呢答 修改tt文件 如 添加ef不会自动生成的displayname属性时可采用以下方法/// ///...
  • quanercao
  • quanercao
  • 2011年06月24日 16:03
  • 275

EF + WCF学习笔记——EF实体类序列化

项目中如果EF + WCF结合使用,
  • leftfist
  • leftfist
  • 2014年05月27日 11:47
  • 5608

EF 多表查询的方法

EF实体类 entity = new EF实体类(); var query = (from u in entityt.用户表 join b in entity.权限表 on u.用户权限Id equ...
  • findsafety
  • findsafety
  • 2015年01月12日 12:01
  • 19953

使用Ef框架进行分页..EF模糊查询..EF多表内连接查询

先来DAL层代码。。稍后解释。。。 public List Getstaff(string DepId,string staffname,DateTime date ,int pageIndex ...
  • agonie201218
  • agonie201218
  • 2015年03月25日 21:35
  • 9280

EntiryFramework中事务操作(三)事务回滚数据模型和数据库不对应问题

一、关于事务回滚数据模型和数据库不对应问题 1.在使用事务时,无论是使用DbContextTransaction,还是使用TransactionScope,如果在事务中出现异常而回滚,都有可能出现这种...
  • u011127019
  • u011127019
  • 2016年12月30日 11:54
  • 1556

EF实现大批量数据库插入操作

**EF实现大批量数据库插入操作最近项目需求需要往SQL Service数据库中创建表来插入大批量数据,数据量为100万左右,因此需要考虑插入效率的问题。根据需求,主要采用EF6.0(EntityFr...
  • xzwykxz
  • xzwykxz
  • 2016年08月04日 19:20
  • 5349

Ef 框架中使用 sql in或者 not in 的方法

List a = (from p in Alist                      where !(from f in Blist select f.Id).Contains(p.Id) ...
  • u014479921
  • u014479921
  • 2017年02月15日 16:48
  • 1778

EF 数据更新

下边是EntityFramework数据更新方面的几个技巧:  1:如何new一个新实体去更新记录,而不是从数据库中查询一条记录来更新。  2:如何在更新实体的同时,对导航属性的实体进行一系列的操...
  • bemavery
  • bemavery
  • 2015年01月23日 14:57
  • 7339

EF中的增删改查

在上一篇中简单的介绍了一下有关EF的一些概念,都是小编的一些个人理解,懂的不多,想深入学习的可以从网上查看一些其他资料。    下面紧接着上一篇所说,来从代码上看一下EF容器是如何实现与后台数据库之...
  • ZHOUCHAOQIANG
  • ZHOUCHAOQIANG
  • 2015年01月28日 20:31
  • 4096
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:EF 学习笔记
举报原因:
原因补充:

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