EF 学习笔记

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五角大寨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值