ASP.NET中持久数据层框架设计
前言:
持久数据层框架是我在研究NHibernate后,受它的启发做的一次创新。当前版本支持多数据库,O/R Mapping等,同时与NHibernate相比,它是一个轻量级框架,在学习和应用上显得更加简单。以下是我的初稿,第一次将我的研究成果展现出来,有不对的地方或更好的建议,欢迎点评。
1. 以下是数据层调用接口:
int CreateDbTable(object objTable); bool IsExistTable(string tableName); int ExcuteSql(string sql); int Insert(string tableName, Hashtable values); int Update(string tableName, Hashtable values, string wher); DataTable Query4DataTable(object obj); string Query4Value(string sql); string Query4Value(string sql, int columnIndex); int GetCount(string sql); void BeginTransaction(); void Commit(); void Rollback(); List<ValueText> Query4VtObject(string sql); DataSet Query4DataSet(object obj); IResultSet Query4ResultSet(string sql); Hashtable Query4Hashtable(string sql); DataRow Query4DataRow(string strSql); IDataReader Query4DataReader(string strSql); int Insert(object ormTable); int Update(object ormTable); int Delete(object ormTable); bool Delete(string tableName); |
2. 以下是数据层调用入口:
2 /// Default Handler Operator for any database
3 /// </summary>
4 public static IDbOperator DefaultDbOperator()
5 {
6 //get instance by db interface, such as SQL Server, Access, MYSQL,

7 Instance instance = new Instance();
8 object objDb = instance.GetInstance();
9 IDbOperator db = objDb as IDbOperator;
10 if (db == null)
11 {
12 throw new NotSuportedDbException(); //need to write a library to support this database
13 }
14 return db;
15 }
在调用数据时,只需要使用
3. 数据层后台配置:
从下面的配置,大家就应该可以看出,持久数据层框架支持任何类型的数据库。
<Data DbType="SQLServer"> <SQLServer type="Zivsoft.Data.SQLServerDbOperator;SQLServer"> <add key="ConnectionString" value="…"/> <add key="AutoCreateTable" value="true"/> <add key="AutoCreateDb" value="false"/> </SQLServer> <MySQL type="Zivsoft.Data.MySQLDbOperator;MySQL"> <add key="ConnectionString" value="…"/> <add key="AutoCreateTable" value="true"/> <add key="AutoCreateDb" value="false"/> </MySQL> </Data> |
4. 持久数据层对ORM支持
NHibernate中,每一个实体类都对应一个XML文件,个人看来有些复杂,因此,在此框架中,做了创新:
以下是自动生成的UserInfo.cs文件实体类完整代码:
using System; using System.Data; /**************************************************** * * Automatically Created by Zivsoft.Data.ORM.Setup * *****************************************************/ namespace Zivsoft.Data.ORM.Table { public class UserInfo:OrmTable { #region UserId [PrimaryKey("UserId",DbType.String)] public ColumnValue<string> UserId{ get{ return new ColumnValue<string> { Name = "UserId", Value = GetString("UserId") }; } set{ Fields["UserId"]=value.Value; } } #endregion #region Password [Column("Password",DbType.String)] public ColumnValue<string> Password{ get{ return new ColumnValue<string> { Name = "Password", Value = GetString("Password") }; } set{ Fields["Password"]=value.Value; } } #endregion #region LoginTime [Column("LoginTime",DbType.DateTime)] public ColumnValue<DateTime?> LoginTime{ get{ return new ColumnValue<DateTime?> { Name = "LoginTime", Value = GetDateTime("LoginTime") }; } set{ Fields["LoginTime"]=value.Value; } } #endregion
} } |
通过以上实体类,可以看出只有得到这个类,对应数据库表所有字段、类型、表名信息全部可以得到。
比如,得到表名的信息:
var name=new UserInfo().GetName();
得到字段UserId的对应数据库名称:
var name=new UserInfo().UserId.Name;
另外,所有实体类,都可以通过框架自制工具根据数据库生成实体类代码。
5. 框架内嵌数据组件
由于持久数据层对业务无关,因此开发了一个内嵌数据组件。此组件在使用时只需要对其配置,
- 上一篇:在NET3.5平台上进行Socket开发例子
- 下一篇:C#中代码重构方法例子