Entity Framework学习高级篇2—改善EF代码的方法(下)
本节,我们将介绍一些改善EF代码的方法,包括编译查询、存储模型视图以及冲突处理等内容。 l CompiledQuery 提供对查询的编译和缓存以供重新使用。当相同的查询需要执行很多遍的时候,那么我们可以使用ComplieQuery将查询的语句进行编译以便下次使用,这样可以免去对同一语句的多次处理,从而改善性能。 示例代码如下: [Test]
l 存储模型视图 在EF中,当执行实体查询的时候,运行时首先将实体模型转换成ESQL视图,而ESQL视图则是根据msl文件来生成相应的代码。此外,ESQL视图包含了相应的查询语句。ESQL视图被创建后将在应用程序域中进行缓存以便下次使用。这个运行时生成存储模型视图是比较耗时的过程。 为了,免去运行时生成存储模型视图,我们可以预先产生这个的存储模型视图。具体步骤如下: 首先,使用EdmGen2来产生存储模型视图,相应的命令如下:
执行此命令后,edmgen2会在当前目录下生成一个名为NorthwindEntites.GeneratedViews.cs这个文件,就是我们要使用的存储模型视图文件。 将此文件添加到项目中就行,其他的代码不需要改变,EF会自动调用此视图文件。如下示例代码: [Test]
没有使用存储模型视图的情况是: 1 passed, 0 failed, 0 skipped, took 7.09 seconds. 项目中添加了NorthwindEntites.GeneratedViews.cs文件,执行情况是: 1 passed, 0 failed, 0 skipped, took 5.38 seconds. 可见,使用了存储模型视图的确是提高了性能。 l 冲突处理 在EF中,默认情况并不会检查并发冲突。因为EF实现的是乐观的并发模式,当有并发的冲突发生时,将会抛出Optimistic Concurrency Exception异常。我们可以通过使用RefreshMode这个枚举来指定当发生冲突时如何处理。 RefreshMode有两中枚举值: ClientsWins: 当提交修改,更新数据库中的值。 StoreWins: 放弃修改,使用数据库中的值。 示例代码片段如下:
上述代码片段,只是说明怎么处理并发冲突,不是具体的并发。(ps:本来是准备开个线程来模拟并发的,但是始终没成功,没明白什么原因,望高人指点呢!) |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |