关闭

EF 学习笔记

标签: Entity framework
328人阅读 评论(0) 收藏 举报
分类:

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:281270次
    • 积分:3779
    • 等级:
    • 排名:第8805名
    • 原创:83篇
    • 转载:45篇
    • 译文:4篇
    • 评论:56条
    最新评论
    物联网网站