Entity Framework 
是微软引进出.NET平台ORM付出组件,
现在业已放源代码. 
以下我们来讨论一下优缺点和片题目, 以下简称EF. 
有趣味而查询官网的Entity Framework 6
RoadMap.

图片 1

高层视图

更改在现有系统利用EntityFramework的优势是呀?

• All -in-1框架的类映射表,需要编制映射代码, 并且是殊为难保障的。
• 可维护性,易于理解的代码,无需创造大之多寡访问层。
• 提供LINQ查询数据库,这亟需从初级开发人员不顶了解SQL。
• EF可以据此图被数据服务和OData Service的底蕴设备。

嘿的状下,不建议利用EF呢?

• 实时之应用程序。
• 只会通过囤过程看数据库。
EF的优势是:跟踪实体状态Change时,不仅仅在存储过程上.(即使EF确实对存储过程支持有限的)。
• 频繁插入操作(Insert),  并且EF不支持特别数据Bulk 插入。
• 频繁更新操作,更新的对象重要是当多履(用一个单值)
   例如:UPDATE 表名 SET ColumA = 10 Where ColumnB =?
  
这种创新操作更好的使的ExecuteNonQuery(也可是起Context上下文或直接打Ado.Net)。
• 反范式的阐明设计和强性能查询。
EF产生查询,他们是难以保障的,它并无克很好地支持映射到无正经的表明。

• 对程序来十分的性能要求, 需要对每个查询进行监控.

 

咱若于加载所有数据及内存中,建议用实体框架? 我们该希望什么的题材啊?

• 加载的兼具实体将急需广大询问与大度的时光。
• 内存开销。
• 会有延期,因为EF需要跟实体的变之跟大Collection对象的处理。

EF的Context上下文不是线程安全的,你莫该于周Service上应用一个Context上下文。
• 如果您打算这样做,使用EF加载实体,但连无治本它们. (Detach the
entities从context)。
• 不使用的上下文Context对象作为一个缓存对象(用于分布式的情事下).  
它不是线程安全之,有一些开发和不依照分散关注(Separation of
Concern)的宏图。 更好的措施是规划缓存API,如AppFabric缓存。

 

技巧界:

内存泄漏:

咱俩发这样一个面貌,每10秒我们开辟Context上下文获取一个单表,并关闭它。
“using (entities context = new entities(_connection)) {… ”

透过同段几只小时,这引起了内存泄漏。
• 我提议您​​检查内存泄漏,以担保其是起EF是出自。
EF是一个开源之,所以现在可告诉外内存泄漏并修正它。
• 使用Profiler的VMMap,以便跟踪泄漏的源流。

每当这种情景下,我们应保持Context一直打开?

• 这其实并无重要,因为查询仍会履行。
然而,这是极端好关Context下,所以缓存的实业将废弃物回收,否则Context和缓存的实体将于GC中提升至第二替代,并且会给累死在那里的持续一段时间。
• 不要吧WCF每个请求创建一个Context上下文对象。

推荐的做法是吗每次操作创建的Context对象,因为实体Item一旦让吃补充加到数据库后便曾经不合时宜了,可能会见促成数据损坏或者重复的Item

 

EDMX的尺寸有影响呢?

• EDMX影响的高低,因为兼具的EDMX数据加载到外存中创建Context上下文。
• EDMX被加载到内存中,解析和照在AppDomain中创造同缓存。
您可关闭并重新打开Context,它并未影响都缓存EDMX映射。

 

异常多的阐发

倘若具有的表放在么的EDMX或个别寄存于几单EDMX文件中?

安能够管住之EDMX中大量之实体? 例如,如何好找到它们?

每当设计器中修改一个特定的发明?
• 如果拆分之间edmx文件,你可以不总是实体的领航性能。
  你应该建立和睦的型,根据你的实体模型设计 –
如果您出平等组是独立的实体,他们好于不同之EDMX模型。
   EDMX文件处理数百只实体类型。
如果实体类型的数目过1000家,我会考虑到之几个Edmxs(分开与再次审视自己的实体模型设计,因为许多的实业类型的一个体系如太多)。
• 在VS
2012,以设计器的增强说功能和设色等,请参考以下链接。
• EF设计器有一些更上一层楼,如在色区分实体组的实体。
   也出第三正实体的设计器,可能会见获得重新好之用户体验。
   请牢记 –
EF是一个开源的,你可以为他们之渴求,甚至献自己之增,所以当EDMX设计器探索老有趣之。
• 你当以各个域/服务来拆分edmx文件及不同EDMX文件。

 

发明中涉及  

Lazy与No Lazy模式?
• 在分布式情况下Lazy代码是魔鬼。
• 如果她们得一致组表中的数额,然后用Include,否则,你可行使Lazy
Load模式

 

“Include”命令加载整个表要ObjectSet原始记录? • Include加载是连锁实业的排列。 EF不采取 * 查询.

 

安利用EF执行批量插入/更新操作?
• 做不至当时一点,你得用初之SQL语句来促成。

 

当一个实体被记为已修改,EF更新的具有列?
• 它不创新具有的排列,除非你正在用分布式的应用程序与Self-Tracking。
“正常”实现下EF只更新修改列。
Self-Tracking不跟的就履新的性,它表明在的装有属性已更新。
您得编制Self-Tracking,并修复它,如果需要的话。
• 您可以附加一个SP以实现自定义的逻辑。
• 您可以更改T4模板的文本,在Self-Tracking下盖维持有原始值。

 

一体RAW更新的支付大么?
• 大多数DB重新计算索引。 这是一个题目涉及及DBA。

 

当我们应用EF为700-800KB的XML文件来更新XML列,我们接受了有关SQL
Server的tempdb一个不胜。 什么导致的吗?

• 可能波及到数据库如何用临时表来更新XML的始末。

   应该和DBA检查你的数据库,你也许需要增加而的tempdb数据库的轻重缓急。
• 在相似情形下, 大的目标,如XML使在GC的Large Object
Heap内存的下压力,你应当考虑迁移至.NET
4.5版的GC大型对象堆碎片整理特性。
• 你可考虑来存储XML为byte
[],它好叫缩减(XML不是同样栽特别划算的格式)。

 

使用EF与ADO.Net的开销?
• DataReader的结果变换到目标的开发,从LINQ编译SQL查询的开支。

   您将发出平等的出,甚至还多,如果您尝试成立你协调的ORM框架。
不这么做!
• 抽象层的付出, 它在他们用EF所做的工作。
• 一般而言,您应该结合代表继承,避免其发出一个重怪之开。

你或许感兴趣的章:

使用LINQPad调试Linq和Entity
Framework

 

指望对而软件开发有帮助.

作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意要保留这个段子声明,且当篇章页面明显位置被起原文连接,否则保留追究法律责任的权。
该篇也罢还要发布以自家之独自博客中-Petter Liu
Blog。

相关文章

网站地图xml地图