EntityFramework优缺点

什么样的情况下,不提出采纳EF呢?

• 实时的应用程序。
• 只可以透过存储进程访问数据库。
EF的优势是:跟踪实体状态Change时,不仅仅在蕴藏进度上.(即便EF确实对存款和储蓄进程帮忙有限的)。
• 频仍插入操作(Insert),  并且EF不援救大数目Bulk 插入。
• 频仍更新操作,更新的目的首要是当多行(用二个单值)
   例如:UPDATE 表名 SET ColumA = 10 Where ColumnB =?
  
那种创新操作更好的使用的ExecuteNonQuery(也可从Context上下文或直接从Ado.Net)。
• 反范式的表设计和高品质查询。
EF产生查询,他们是难以维护的,它并无法很好地帮助映射到不专业的表。

• 对程序有12分的质量要求, 供给对各类查询实行监察和控制.

 

特别多的表

改变在现有系统接纳EntityFramework的优势是何等?

• All -in-1框架的类映射表,必要编制映射代码, 并且是很难保障的。
• 可维护性,易于精晓的代码,无需创建大的多寡访问层。
• 提供LINQ查询数据库,那亟需从初级开发人士不太驾驭SQL。
• EF能够用功效于数据服务和OData 瑟维斯的基本功设备。

EDMX的大小有影响吗?

• EDMX影响的尺寸,因为有着的EDMX数据加载到内部存款和储蓄器中成立Context上下文。
• EDMX被加载到内部存款和储蓄器中,解析与映射在AppDomain中创制和缓存。
您能够关闭并再一次打开Context,它从不影响已缓存EDMX映射。

 

SQL Server 1

表之间关系  

Lazy与No Lazy模式?
• 在分布式景况下Lazy代码是鬼怪。
• 倘使他们需求一组表中的数据,然后使用Include,不然,你能够运用Lazy
Load格局

 

“Include”命令加载整个表或ObjectSet原始记录? • Include加载是有关实业的列。 EF不行使 * 查询.

 

怎样选择EF执行批量安顿/更新操作?
• 做不到这点,你需求动用原来的SQL语句来促成。

 

当贰个实体被标记为已修改,EF更新的有所列?
• 它不革新具有的列,除非你正在采纳分布式的应用程序与Self-Tracking。
“正常”实现下EF只更新修改列。
Self-Tracking不跟踪的已更新的性质,它标志着的富有属性已履新。
您能够编写Self-Tracking,并修复它,借使须要的话。
• 您能够叠加1个SP以落实自定义的逻辑。
• 您能够更改T4模板的文本,在Self-Tracking下以保证全部原始值。

 

一体RAW更新的开销大么?
• 超越2/4DB重新总计索引。 那是2个题材关乎到DBA。

 

当大家使用EF为700-800KB的XML文件来更新XML列,大家收起了关于SQL
Server的tempdb二个特别。 什么导致的啊?

• 大概涉及到数据库怎样用近期表来更新XML的剧情。

   应该和DBA检查你的数据库,你大概需求追加你的tempdb数据库的轻重。
• 在一般景象下, 大的对象,如XML使在GC的Large Object
Heap内部存储器的下压力,你应当考虑迁移到.NET
4.5本子的GC大型对象堆碎片整理脾性。
• 你能够设想来存款和储蓄XML为byte
[],它能够被核减(XML不是一种13分划算的格式)。

 

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

   您将有平等的支出,甚至更加多,若是您尝试建立你协调的ORubiconM框架。
不这么做!
• 抽象层的开销, 它取决于他们用EF所做的事体。
• 一般而言,您应该结合代表继承,幸免它有2个更大的费用。

您或者感兴趣的稿子:

使用LINQPad调试Linq和Entity
Framework

 

仰望对您软件开发有帮忙.

作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
正文版权归小编和天涯论坛共有,欢迎转发,但未经小编同意必须保留此段注脚,且在篇章页面显著地点给出原版的书文连接,不然保留追究法律义务的权利。
该文章也同时公告在本人的单独博客中-Petter Liu
Blog

高层视图

若是全体的表放在单个的EDMX或个别寄存于多少个EDMX文件之间?

怎么能管住的EDMX中山高校量的实体? 例如,怎样得以找到它们?

SQL Server,在设计器中期维修改3个特定的表?
• 假设拆分之间edmx文件,你可以不总是实体的导航品质。
  你应当创建筑组织调的模子,依照你的实人体模型型设计 –
如若你有一组是独立的实体,他们得以在不一致的EDMX模型。
   EDMX文件处理数百个实体类型。
如若实体类型的多寡超越一千家,小编会考虑到的多少个艾德mxs(分开和重复审视自个儿的实人体模型型设计,因为许多的实体类型的叁个系统就好像太多)。
• 在VS
贰零壹叁,以设计器的滋长分解效能和设色等,请参阅以下链接
• EF设计器有局地革新,如着色区分实体组的实业。
   也有第二方实体的设计器,大概会赢得更好的用户体验。
   请记住 –
EF是3个开源的,你能够给他们的渴求,甚至贡献自个儿的加码,所以在EDMX设计器探索很有意思的。
• 你应有按每种域/服务来拆分edmx文件到分裂EDMX文件。

 

我们要在加载全部数据到内部存款和储蓄器中,建议采用实体框架? 我们应当希望什么的难题吗?

• 加载的兼具实体将供给广大查询和大批量的时光。
• 内部存款和储蓄器费用。
• 会有延期,因为EF供给跟踪实体的扭转的和大Collection对象的处理。

EF的Context上下文不是线程安全的,你不应有在全部瑟维斯上采取2个Context上下文。
• 假如你打算那样做,使用EF加载实体,但并不治本它们. (Detach the
entities从context)。
• 不行使的左右文Context对象作为贰个缓存对象(用于分布式的情景下).  
它不是线程安全的,有部分支出和不依照分散关怀(Separation of
Concern)的统一筹划。 更好的不二法门是设计缓存API,如App法布里c缓存。

 

技巧层面:

在那种景况下,大家应该保证Context向来打开?

• 那实际并不首要,因为查询照旧会履行。
可是,那是最好关闭Context下,所以缓存的实体将污染源回收,不然Context和缓存的实业将在GC中进步到第1代,并且会被困在那里的频频一段时间。
• 不要为WCF每一种请求创造二个Context上下文对象。

推荐的做法是为每回操作创造的Context对象,因为实体Item一旦被被添加到数据库后就曾经不合时宜了,只怕会导致数据损坏或重新的Item

 

      Entity Framework 
是微软推荐出.NET平台ORM支出组件,
今后已放源代码
以下大家来钻探一下优缺点和有些题材, 以下简称EF. 
有趣味可查询官网的Entity Framework 6
RoadMap
.

内部存储器泄漏:

大家有如此二个景色,每10秒大家开拓Context上下文获取3个单表,并关闭它。
“using (entities context = new entities(_connection)) {… ”

经过一段多少个钟头,那引起了内部存款和储蓄器泄漏。
• 作者提议你​​检查内部存款和储蓄器泄漏,以确认保证它是从EF是缘于。
EF是三个开源的,所以今后能够告诉任何内部存款和储蓄器泄漏并创新它。
• 使用Profiler的VMMap,以便跟踪泄漏的源流。

相关文章