ASP.Net中Ado.Net Entity Framework实际项目应用

关于Ado.Net Entity Framework 的理论、入门教学文章已不少了,但是很少有人讲到在ASP.Net项目中实际项目应用的问题,往往学的时候轻松搞定,一上手项目就一头雾水。

比如在教程中最常见的这种形式的使用方法:

using(MyObjectContext c=new MyObjectContext())

{

……

}

如果在实际应用中,每每需要连接数据库,就造这么一个代码块的话,那么一个页面访问时就可能会创建数个数据库连接,致使并发用户访问数大打折扣;

而假如只使用一个这样的代码块的话,那么由于分层、服务器控件、用户控件等因素,又难以将所有数据库访问操作都揉到这一个代码块当中;

那么到底该怎样做才是最佳方案呢?

这个问题或许是Entity Framework的使用者产生疑惑最多的一点。

我在此将结合自己的经验,解答包括上述问题在内的一些在ASP.Net实际项目中容易产生的疑问。

准备工作

首先,我们需要搭建一个演示环境。

建立一个数据库,并创建如下两个表:

image3

关系:Article的PostUser字段对应到User的ID字段

将两个表分别填充一些数据:

image9

image6

生成Entity Framwork模型:

image48

准备工作完成。

如何设计业务逻辑层?

如果要扩展实体类的功能,应该通过“部分类”(partial)实现:

image17

如果需要借助ObjectContext对象查询或更新数据库,应将ObjectContext定义为方法参数,而不是在业务逻辑层中创建ObjectContext对象。

例如,下面的方法不应该出现在业务逻辑层:

image33

更好的做法是:

image37

上图中高亮的重载方法只应在需要时才编写,通常都可予以忽略。

(方法中的统计总数的代码语句完全可以由LinQ语句替代完成,并且非常精简,而这里只是象征性演示,别太在意)

如何快速通过主键获取对应实体?

image41

这样是从缓存中直接取出实体对象,效率非常高。

如何优化查询性能?

可通过CompiledQuery.Compile()预编译查询:

image45

如何在同一页面中共享一个ObjectContext?

一般来说,一个页面只需要一个数据库连接,这样可以减少数据库的并发压力,使同一时间可以有更多用户访问网站。

而通常情况下,我们都使用ObjectContext的无参构造函数创建包含默认连接的ObjectContext对象,因此,在同一页面中共享一个ObjectContext就能实现同一页面共享一个数据库连接的目标。

接下来我们将在页面中放置两个EntityDataSource控件,分别获取所有用户及所有文章,并以ListView控件显示出来。

同时还要放置一个用户控件,用来获取并显示每个用户曾发布的文章。

我们先来创建用户控件界面:

image52

用户控件界面中仅包含一个ListView控件。

(为了简单起见,ul中的li代码将由后台生成,然后直接绑定到这里)

接着是后台代码:

image60

注意,这里定义了一个ObjectContext属性,程序将通过该属性访问数据库及业务逻辑层,但该属性并未在这里初始化,而是要由使用此用户控件的页面初始化该属性。

接下来编写页面前台代码:

image64

简单的放置并配置了两个EntityDataSource及ListView,并放置了一个前面创建的用户控件。

后台代码:

image68

这里也同样设置了一个ObjectContext属性,并在蓝色高亮处重写了OnInit,在其中进行初始化,并赋值给用户控件,然后在绿色高亮处重写了Dispose,对ObjectContext进行释放。

这样用户控件就将和页面使用同一个ObjectContext对象了。

然而,每个EntityDataSource还都会自己创建ObjectContext连接数据库,这显然不合我们的期望,解决办法是分别注册它们的ContextCreating、ContextDisposing事件,做如下处理:

image72

这样页面虽然多次在不同的位置访问数据库,但仅使用一个ObjectContext、一个数据库连接。

执行结果:

image90

如何在多个ObjectContext共享一个数据库连接?

EntityConnection即代表一个数据库连接,可以通过创建EntityConnection对象,并将其分配给多个ObjectContext对象,实现多ObjectContext共享单连接,具体方法可参看MSDN:http://msdn.microsoft.com/zh-cn/library/bb738582.aspx

多ObjectContext共享一个连接,与整页面共享一个ObjectContext有什么不同呢?

一般来说感觉不到什么不同,但当你将更改提交到数据库时,单个ObjectContext将维护全部相关事务,一旦提交失败将全部回滚,而多个ObjectContext就可以分别处理各自的事务,相比之下更具灵活性。

转载于:https://www.cnblogs.com/tling091223/archive/2009/12/29/1634679.html

基于ASP.NET、Entity Framework、Bootstrap的分页 基于ASP.NET、Entity Framework、Bootstrap的分页创建ASP.NET MVC项目创建EF实体框架创建一个控制器1.先删除它的默认代码。2.设置table静态数据3.分页按钮基本布局4.写控制器部分代码5.稍稍修改分页按钮6.稍微改一下控制器代码7.看看最后效果完整代码 创建ASP.NET MVC项目 我这里用的是Visual Studio 2019。 创建项目时选择ASP.NET Web应用程序,点击下一步,对项目命名,再点击创建,勾选MVC,点击创建。 创建EF实体框架 右 阅读详情

相关推荐

ASP.NET入门到项目实战完整指南

ASP.NET是微软开发的一个免费开源的Web开发框架,它基于.NET平台,允许开发者使用.NET语言创建Web应用程序。它支持多种编程语言,但最常见的是C#。ASP.NET的强大之处在于它将网页与服务器端代码紧密集成,提供了一种高效的开发模型。对象关系映射(ORM)是一种编程技术,用于在不同类型的系统之间转换数据。在数据库领域,ORM技术将关系数据库中的表映射为面向对象编程语言中的对象。代码块示例// 示例代码:定义一个用户类并映射到数据库中的用户表set;set;

weixin_33308579的博客 961

ASP.Net中Ado.Net Entity Framework实际项目应用释疑

关于Ado.Net Entity Framework 的理论、入门教学文章已不少了,但是很少有人讲到在ASP.Net项目中实际项目应用的问题,往往学的时候轻松搞定,一上手项目就一头雾水。 比如在教程中最常见的这种形式的使用方法: using(MyObjectContext c=new MyObjectContext()) { …… } 如果在实际应用...

weixin_34405354的博客 147

C#项目开发实战:从基础到高级技术的完整源代码解析

C#(读作"See Sharp")是一种由微软开发的现代、类型安全的面向对象的编程语言。自2000年首次推出以来,C#经历了多个版本的迭代,不断吸取了新的编程范式和技术,如今已成为开发.NET应用程序的首选语言。C#是作为C和C++的继承者而设计的,它结合了C++的强大功能和Visual Basic的易用性。C#旨在实现快速开发、简化编程模型、保证内存安全以及提升开发人员的生产力。

weixin_29496633的博客 1089

MAX14431与PIC18F87K22实现SPI隔离的完整方案

在工业控制与嵌入式系统设计领域,通信接口的电气隔离是解决地环路干扰、保护器件安全的常用手段。地电位差和共模噪声可能导致SPI等接口传输异常甚至损坏芯片。数字隔离器依靠内部隔离屏障,实现信号与电源的可靠传递,提升系统稳定性和抗干扰能力。针对这一需求,一套以MAX14431BAEE+为核心、由PIC18F87K22主控配合的SPI隔离方案,完整覆盖了器件选型、原理图设计、固件配置和调试要点,适用于电机驱动、仪器仪表、电池管理等工业场景,为工程师提供了一套可落地的实践参考。

weixin_34007906的博客 245

Anolis OS 23实战:5分钟搞定AI环境配置(含NVIDIA驱动一键安装)

本文详细介绍了如何在Anolis OS 23上快速配置AI开发环境,包括NVIDIA驱动的一键安装和TensorFlow、PyTorch等AI框架的部署。通过智能硬件适配引擎和优化后的二进制包,用户可在5分钟内完成传统需要数小时的配置工作,显著提升AI项目开发效率。

weixin_30335575的博客 536

Palabos User Guide中文解读 | 第五章 | Palabos编程 (跳过了第四章Palabos-Java接口)

作者的话:本人在学习palabos时,发现国内中文资料甚少,恰好网上可以直接搜到palabos user guide这种英文资料,加之时间充裕,便打算开始翻译,翻了一节后发现这可能算侵权,就比较伤脑筋,突然想到自己写中文解读即可,便有了下面的博客。 Palabos User Guide Release 1.0 r1 Copyright © 2019 University of Geneva Jul...

Yulan Fang's notes. 2298

【转】ASP.NET AJAX,WCF,ADO.NET Entity 开发实例

本文转自:http://www.cnblogs.com/edrp/archive/2008/09/03/1283434.html 开发环境:Windows server 2008 Enterprise,Microsoft Visual Studio 2008 SP1,.NET Framework 3.5 SP1,Microsoft SQL Server 2008 开发架构: ASP.NE...

weixin_30455023的博客 79

PostgreSQL+PostGIS空间数据入库实战:从矢量栅格到GeoServer发布全流程

本文详细介绍了将矢量与栅格空间数据导入PostgreSQL并利用PostGIS扩展进行管理的完整流程。内容涵盖环境搭建、使用shp2pgsql和raster2pgsql工具进行数据入库、基础空间查询验证,以及最终通过GeoServer发布为地图服务的实战步骤,为构建空间数据平台提供清晰指引。

weixin_29268267的博客 289

ASP.NET AJAX,WCF,ADO.NET Entity 开发实例

开发环境:Windows server 2008 Enterprise,Microsoft Visual Studio 2008 SP1,.NET Framework 3.5 SP1,Microsoft SQL Server 2008 开发架构: ASP.NET AJAX,WCF,ADO.NET Entity Framework 开发步骤: 1、创建一个空白解决方案:JXCSln; 2、添...

weixin_30677073的博客 77

【PostgreSQL教程】PostgreSQL 特别篇之 语言接口Java

本篇教程的Java程序中开始使用PostgreSQL之前,需要确保在计算机上设置了PostgreSQL JDBC和Java。您可以检查Java教程以在计算机上安装Java。现在让本篇教程检查如何设置PostgreSQL JDBC驱动程序。

No8g攻城狮的博客 1758

sphincs+ Nist Round3文档中文译版(SPHINCS+ Submission to the NIST post-quantum project, v.3)

1. 引言 哈希基础签名方案最初是由Lamport [14]在1970年代后期作为一次性签名方案开发的,并由Merkle [16]扩展为多次签名方案。这些方案的安全性易于分析,并仅依赖于所使用的哈希函数的属性。然而,Merkle基于树的签名方案需要在密钥生成时就确定要进行签名的数量,且为了保持性能这个数字要小。最重要的是,该系统需要用户记住一个状态:这个状态包含一些信息以记住密钥已经进行了多少次签名。 在Lamport方案诞生后的40年里,产生了许多想法改进了哈希基础签名的性能、实用性和理论基础,最终XMS

dedanddwb的博客 394

ADO.NET Entity Framework 简介

一直对EF都是一知半解的,没有系统的了解过EF有什么样的功能,有什么具体的好处。在接下来的文章中会详细介绍EF。以下是参考MSDN上的文章,翻译并加以自己的理解得出的。 ADO.NET EntityFramework 简介 在微软的ADO.NET Entity Framework是一个对象/关系映射(Object/Relational Mapping)框架,使开发人员可以使用域特定对象的关系...

weixin_30919919的博客 657

人工智能机器学习基础篇】——深入详解强化学习 基础知识,理解马尔可夫决策过程(MDP)、策略、价值函数等关键概念

人工智能机器学习基础篇】——深入详解强化学习 基础知识,理解马尔可夫决策过程(MDP)、策略、价值函数等关键概念

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 1925

用ADO.NET Entity Framework存取数据库中的图片

      我的博客:http://www.intersense.net/Z-Blog/      网站中的图片可以保存到文件系统中,即专门的目录用于图片的存放,这样的存储配上数据库中保存的图片路径信息,相信很多网站是这么选择的。这样的搭配由于存储和管理信息是分开的,其优点就是对数据库的性能不会产生太大影响,但是也正是由于这种分开网站的目录结构轻易是不可以变的,另外图片数据的备份需要数据库

stickking的专栏 901

STM32CubeIDE下载程序报错:Failed to execute MI command: load G:\\Cube_IDE_EXP\\00_FIRST\\Debug\\00...如何解决??

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2600

【RT-DETR实战】159、改进九:知识蒸馏从YOLOv8教师模型学习

摘要: 本文探讨了知识蒸馏在RT-DETR目标检测模型中的应用挑战与实践经验。作者以YOLOv8作为教师模型,针对特征对齐、损失函数设计和训练策略等核心问题,提出了适配器模块、动态权重调整和多阶段训练等优化方案。文章重点分析了教师模型选择、特征图匹配、损失函数组合等关键环节的实战技巧,并总结了蒸馏模型部署时的注意事项。通过实验验证,作者指出知识蒸馏应关注模型"思维方式"的迁移而非简单特征复制,并强调合理评估指标和教师模型选择的重要性。最后,作者分享了技术迭代中的边际效应认知,为工业场景下的模型优化提供了实用

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 268

[ASP.NET MVC 小牛之路]06 - 使用 Entity Framework

在家闲着也是闲着,继续写我的[ASP.NET MVC 小牛之路]系列吧。在该系列的上一篇博文中,在显示书本信息列表的时候,我们是在程序代码中手工造的数据。本文将演示如何在ASP.NET MVC中使用Entity Framework从数据库中获取数据。虽然本文题目听上去比较简单,但如果你认真阅读,相信你一定会有所收获。 本文目录: ORM 和 EF 当我们要开发一个应用程序,就要考虑怎...

weixin_34365635的博客 1458

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

EF(ADO.NET Entity Framework)

编辑播报ADO.NET Entity Framework 以 Entity Data Model (EDM) 为主,将数据逻辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有 Entity Client,Object Context 以及 LINQ 可以使用。ADO.NET Entity Framework 建模。

微微的猪食小窝 1133

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

在 ASP.NET MVC 中使用 Entity Framework

在现代Web开发中,数据访问和持久化是关键任务之一。为了简化这一过程,对象关系映射(ORM)框架如Entity Framework(EF)被广泛采用。EF通过将数据库表映射为C#类,使得开发者可以用面向对象的方式操作数据库,从而大大提高了开发效率和代码的可维护性。本文将详细介绍如何在ASP.NET MVC中使用Entity Framework进行数据操作。Entity Framework是一个由微软开发的ORM工具,用于在.NET平台上处理数据库相关操作。

2201_75446221的博客 2214

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LINQ to SQL和ADO.NET Entity Framework之间的抉择

原文: http://ramanisandeep.wordpress.com/2010/12/09/linq-to-sql-vs-ado-net-entity-framework/   LINQ to SQL和ADO.NET Entity Framework之间的抉择   我相信很多的ASP.NET的新手经常会搞不清楚在LINQ to SQL和ADO.NET Entity Framewor

http://itech.cnblogs.com 1061

Asp.Net Ajax+WCF Service+ADO.NET Entity Framework实现数据列表,数据筛选,分页,排序,删除

====================================================== 注:本文源代码点此下载 ====================================================== 编写这个demo的目的主要是为了把最近学到的一些vs2008开发技术做一个综合归纳,并跟大家探讨一下这些技术在实际项目应用中遇到的一些问题。先来简

javazhuanzai的专栏 672

Asp.Net MVC Entity Framework

Asp.Net MVC 模型(使用Entity Framework创建模型类) - Part.1 这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类。这篇教程假设你事先对Microsoft Entity Framework没有任何的了解。读完本篇教程,你将会理解如何使用Entity Framework...

ddluc40004的专栏 218
上一篇: 浅谈ASP.NET的Postback 2
下一篇: 这个就是在程序中调用编译器···
Java11257
博客等级 码龄12年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值