探讨.NET数据访问层相关基础结构设计原则
创始人
2024-04-21 12:50:56
0

.NET数据访问层基础结构设计目标:

1.完成面向对象的数据访问

2.减少调用侧代码量

3.满足可扩展的系统需求

4.保证数据一致性

其中,对于.NET访问层基础结构设计,采用如下原则。

1.对于面向对象系统,采用DataReader方式进行数据读取;

2.为了减少调用侧代码量和满足可扩展的系统需求,采用反射实现动态的属性访问;

作者参与系统使用Codeplex的项目FastReflection作为反射工具,对于对象基本属性可通过属性名字符串直接访问,

例,Teacher类有属性ClassID,我们可通过teacher.Item("ClassID")对其进行读写;

很多人担心反射的效率问题,当然自己每次生成属性访问器可达到只有4倍的效率低下,而直接使用FastReflection可能会达到近40倍的效率低下;但1000000次读写在0.7秒内完成与可扩展的目标权衡起来,还是可以采用的。

3.为了保证数据的一致性,我们采用每个数据表都有物理主键ID,类型为GUID的设计;同时使用DateTime型UpdDateTime字段来记录插入和更新时间,作为排他的基本条件。

如何保证数据排他:

用户A和用户B同时取得一条数据进行更新的同时,使用UpdDateTime作为条件,如果UpdDateTime一致则可进行更新;

反之,无法进行更新。

在编码中,我们使用ExecuteNonQuery执行更新SQL文,而对返回的影响件数进行判断;对于影响零件的情况,视为数据不一致的更新行为,报排他异常。

对于主键的使用:

小型系统一般都使用自动增长唯一标识列,都是提交数据后查询主键,使用SQLServer2005以上的系统,可以通过如下SQL文和输出参数获得自动增长的主键值:

  1. INSERTCategories(CategoryName)Values(@CategoryName)SET@Identity=SCOPE_IDENTITY() 

其中输出参数@Identity就是返回的自动增长主键值。

而对于比较复杂的系统,如包含部分更新及全部更新和主细表同时更新的情况下,需要自己在服务器端进行主键设置,此种情况建议把主键类型设置为GUID型而不使用自动生成属性,这样就可以在更新执行之前设置主表数据主键以及详细表数据的外键并进行更新了。

4.事务控制方面,主要使用隐式事务在业务逻辑层就将事务开启。

5.对于.NET数据库访问层建议大家多使用EnterpriseLibarary的数据访问组件,优化方面可以根据自己的设计进行,同时可以使用AOP组件对结构进行优化,我们自己的项目使用PostSharp对所有层的异常处理和日志输出进行了优化。

【编辑推荐】

  1. ASP.NET 2.0数据教程:完成数据访问层
  2. ASP.NET 2.0数据教程:给数据访问层添加参数化的方法
  3. ASP.NET 2.0数据教程:创建数据访问层
  4. 用ObjectSpaces重建IBuySpy的数据访问层
  5. 了解ASP.NET Web应用程序模型

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...