龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > asp.net编程 >

ASP.NET中持久数据层框架设计

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
前言: 持久数据层框架是我在研究 NHibernate 后,受它的启发做的一次创新。当前版本支持多数据库, O/R Mapping 等,同时与 NHibernate 相比,它是一个轻量级框架,在学习和应用上显得更

前言:

持久数据层框架是我在研究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.     以下是数据层调用入口:

 

 

 1         /// <summary> 
 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         } 

 

在调用数据时,只需要使用

IDbOperator db=DbFactory.DefaultDbOperator();

 

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.     框架内嵌数据组件

由于持久数据层对业务无关,因此开发了一个内嵌数据组件。此组件在使用时只需要对其配置,

收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!

热评话题

按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接