实践ORM,创建基于Grove的.NET应用程序(一)

** 实践 ** ** ORM ** ** ,创建基于 ** ** Grove ** ** 的 ** ** .NET ** ** 应用程序(一) ** ** **


撰稿 林学鹏 [email protected]

就目前大多数软件开发项目的数据都存储在关系型数据库中,开发时要求开发人员对 SQL 语句语法以及规则等必须很熟悉,而很多情况下,开发人员需要手写 SQL 语句,同时还得考虑事务处理,逻辑分析等等问题,导致整个项目中的 SQL 语句到处都是,对程序的可读性,可维护性都带来了阻碍,同时,当新项目加入时,很多地方又不得不重新 coding 一些大而复杂的相关代码,这样又何来可重用之谈呢?另外对程序员要求就高了,程序调试起来又麻烦了,又得调试程序,又得调试 SQL 语句,很多时候 SQL 语句包含了一些逻辑部分的处理,这些都是非常不科学的。

为了提高项目的灵活性,可重用性等,就必须提到 OR-M (对象角色建模),个人认为 OR-M 的作用是解耦,在原本复杂的系统中加入 OR-M 一层,使得系统变得更容易维护和升级,比如在之前的系统中,更改了一个数据库字段,则相应用到该字段的所有地方都随之而改动,这有可能带来很大的工作量,而应用之后,业务逻辑层的代码几乎不用改动,相应的,调用的地方也不用改动,改动的也许仅仅只有映射的那些地方。由于本文介绍的重点不是 OR-M ,所以关于 OR-M 的具体信息见最后的参考资料。

目前,针对 .NET 下的 ORM 方式有很多,大概归纳有三种,一是实体类映射方式,二是透过 XML 来描述,三是 XML 和实体类一起用(比如 MS 的 ObjectSpaces )

本文演示了如何使用 Grove Tool Kit 来创建一个基于 Grove 的简单 Web 应用程序。 Grove 是一套基于 Microsoft . NET Framework 的可重用开发组件,支持多种不同数据库项目,提供标准的二层,三层及多层等开发框架。

** 简介 **

Grove Develop Component Kit 包括 Grove Develop Component 和 Grove Tool Kit 两部分 ;

Grove Develop Component 是一套基于 Microsoft . NET Framework 的可重用开发组件,支持多种不同数据库项目,提供标准的二层,三层及多层等开发框架。

Grove Develop Component 结合可复用面向对象软件开发原理 ( 泛指设计模式 ) ,注重提高软件开发中的代码重用率,并使软件开发架构清晰,有利于加快软件开发速度,减低软件维护成本。

Grove Tool Kit 是针对 Grove Develop Component 提供的一套. NET Develop Environment 的外接程序 ,能够帮助预览或生成依赖于 Grove 组件的可重用代码,包括数据库映射的实体类 (Entity Definition Class) , XML 实体描述 (XML Definition for data store) 等。

Grove Tool Kit 最大的特点在于可以通过工具本身调试,关联多表之间的关系,并生成多表查询的映射实体或 XML 映射描述。

** 安装 **

安装 GroveKit 要求 VS.NET 2002 或 2003 及 .NET Framework 1.0 或 1.1 ,本文以 .NET Framework 1.1 和 VS.NET 2003 为例。

GroveKit 的安装包( GroveKit.zip ),您可以从 http://grove.91link.com 获得。

安装步骤:

1. 解压缩 GroveKit.zip ,执行安装

2. 执行桌面上的 Grove Install 以完成安装任务

** 创建基于 Grove ** ** 的 Web ** ** 项目 **

在 GroveKit 安装结束后,打开 VS.NET ,在 VS.NET 的启动画面上,您会看到 Grove Develop Kit 的标志,表示 GroveKit 已被正确安装。

本文将以 C# ASP.NET 项目为例,项名 WebApp1 ,操作系统 Windows 2000 ,数据库 SQL Server 2000 ,数据库实例名: WebApp1 ,表结构定义如下

表名

|

字段

---|---

Customers

|

CustomerID int(4) PK
CustomerName varchar(50)
CustomerDesc varchar(200)

Addresses

|

AddressID int(4) PK
CustomerID int(4)
Address varchar(200)

  1. 在 VS.NET 中,打开“文件 -> 新建 -> 项目”,在 Visual C# 项目选择 ASP.NET WEB 应用程序,确定后生成 WebApp1 项目,在项目中添加文件夹 Entities (实体), Managers ( Façade 层), EntityDB (数据库层),并添加对 Grove.dll 的引用, Grove.dll 位于 GroveKit 的安装路径下,您也可以通过 .NET Configuration 将 Grove 添加到程序集缓存中。 ** **

** ** 2) 在 VS.NET 中,打开“工具 ->Grove Tool Kit ”,在 GroveToolKit 中设置数据库连接属性,并保存。

图 1. 设置数据库连接串

  1. 在当前项目路径 C:\Inetpub\wwwroot\WebApp1 下建立 LogFiles 文件夹,并配置当前 Web 项目的 web.config (在 之前加入以下配置 )

< appSettings >

< add key ="DBConnString" value ="Server=localhost;Uid=sa;Pwd=sa;Database=WebApp1" />

< add key ="LogPath " value ="c:\inetpub\wwwroot\WebApp1\LogFiles" /> 4) 在 VS.NET 解决方案资源管理器中选中 Entities ,并在 GroveToolKit 中选择表名,点 击 GroveToolKit 的 toolbar 中的 Preview Entity Class 按钮,出现该表的实体映射类预览窗口。

图 2. 预览实体映射类

  1. 检查当前预览的实体类的 namespace ,此处应该改为 WebApp1.Entities ,点击生成文件按钮,该实体类将被生成到解决方案资源管理器当前选中的路径下。

  2. 重复 4,5 步骤生成其他表的映射实体类。

Customer.cs


using System;

using Grove.DataObject;

[DataTable("Customers")]

public class Customer

{

int _CustomerID;

string _CustomerName;

string _CustomerDesc;

[KeyField("CustomerID")]

public int CustomerID

{

get { return this ._CustomerID;}

set { this ._CustomerID= value ;}

}

[DataField("CustomerName")]

public string CustomerName

{

get { return this ._CustomerName;}

set { this ._CustomerName= value ;}

}

[DataField("CustomerDesc")]

public string CustomerDesc

{

get { return this ._CustomerDesc;}

set { this ._CustomerDesc= value ;}

}

}

Address.cs

using System;

using Grove.DataObject;

[DataTable("Addresses")]

public class Address

{

int _AddressID;

int _CustomerID;

string _Address;

[KeyField("AddressID")]

public int AddressID

{

get { return this ._AddressID;}

set { this ._AddressID= value ;}

}

[DataField("CustomerID")]

public int CustomerID

{

get { return this ._CustomerID;}

set { this ._CustomerID= value ;}

}

[DataField("Address")]

public string CustomerAddress

{

get { return this ._Address;}

set { this ._Address= value ;}

}

}

代码 1. 实体映射类

Published At
Categories with Web编程
Tagged with
comments powered by Disqus