ASP.Net中Ado.Net Entity Framework实际项目应用释疑
关于Ado.Net Entity Framework 的理论、入门教学文章已不少了,但是很少有人讲到在ASP.Net项目中实际项目应用的问题,往往学的时候轻松搞定,一上手项目就一头雾水。 比如在教程中最常见的这种形式的使用方法: using(MyObjectContext c=new MyObjectContext()) {
} 如果在实际应用中,每每需要连接数据库,就造这么一个代码块的话,那么一个页面访问时就可能会创建数个数据库连接,致使并发用户访问数大打折扣; 而假如只使用一个这样的代码块的话,那么由于分层、服务器控件、用户控件等因素,又难以将所有数据库访问操作都揉到这一个代码块当中; 那么到底该怎样做才是最佳方案呢? 这个问题或许是Entity Framework的使用者产生疑惑最多的一点。 我在此将结合自己的经验,解答包括上述问题在内的一些在ASP.Net实际项目中容易产生的疑问。 准备工作首先,我们需要搭建一个演示环境。 建立一个数据库,并创建如下两个表:
关系:Article的PostUser字段对应到User的ID字段 将两个表分别填充一些数据:
生成Entity Framwork模型:
准备工作完成。 如何设计业务逻辑层?如果要扩展实体类的功能,应该通过“部分类”(partial)实现:
如果需要借助ObjectContext对象查询或更新数据库,应将ObjectContext定义为方法参数,而不是在业务逻辑层中创建ObjectContext对象。 例如,下面的方法不应该出现在业务逻辑层:
更好的做法是:
上图中高亮的重载方法只应在需要时才编写,通常都可予以忽略。 (方法中的统计总数的代码语句完全可以由LinQ语句替代完成,并且非常精简,而这里只是象征性演示,别太在意) 如何快速通过主键获取对应实体?
这样是从缓存中直接取出实体对象,效率非常高。 如何优化查询性能?可通过CompiledQuery.Compile()预编译查询:
如何在同一页面中共享一个ObjectContext?一般来说,一个页面只需要一个数据库连接,这样可以减少数据库的并发压力,使同一时间可以有更多用户访问网站。 而通常情况下,我们都使用ObjectContext的无参构造函数创建包含默认连接的ObjectContext对象,因此,在同一页面中共享一个ObjectContext就能实现同一页面共享一个数据库连接的目标。 接下来我们将在页面中放置两个EntityDataSource控件,分别获取所有用户及所有文章,并以ListView控件显示出来。 同时还要放置一个用户控件,用来获取并显示每个用户曾发布的文章。 我们先来创建 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |