国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Object/DataSet Relational Mapping(對象/數據集關系映射)

2019-11-18 16:52:08
字體:
來源:轉載
供稿:網友

在.Net的開發領域,您和您的公司是不是在為以下問題所困擾

1.DataSet中DataRow只能以DataTable[0].Rows[0][“Name”]的方式獲取數據

2.Sql配置的不動態,不清晰的Sql拼湊

3.使用java 的ORM設計.Net,使用對象層,每一次修改都將影響反射的對象。

那么請繼續看下面的文章

Object/DataSet Relational Mapping

(對象/數據集關系映射)

NickLee.ODRM模式可以很好的解決以上問題

1.DataSet中DataRow只能以DataTable[0].Rows[0][“Name”]的方式獲取數據

方案:DataRow轉化為序列化對象,但序列化對象只作為清晰的對象操作實體處理業務判斷和數據

2.Sql配置的不動態,不清晰的Sql拼湊

方案:采用IBatisNet數據層構架,采用IBatisNet動態的SQL語法,但返回DataSet

3.使用JAVA 的ORM設計.Net,使用對象層,每一次修改都將影響反射的對象。

方案:清晰的O(對象層),無反射機制,避免每一次修改對對象層的改動。

下面做詳細的說明

       以下代碼演示將包含在NickLee.Framework.2.0.1.2以上版本中,當然,我們只是提供一種思想,靈活的方案,僅代表TheFallAngel團隊的思想。

       必須引用的dll

       IBatisNet(Version 1.5及其以后) with NickLee.Framework修改版本

       NickLee.Web.UI(Version 2006.2.1447及其以后版本)

1.      cXTM_User.cs

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

/// <summary>

/// cXTM_User.序列化

/// </summary>

[Serializable]

public class cXTM_User

{

    PRivate int _dID;

    private string _userName;

    public cXTM_User()

    {

        //

        // TODO: 在此處添加構造函數邏輯

        //

    }

    public int DID

    {

        get

        {

            return _dID;

        }

        set

        {

            _dID = value;

        }

    }

    public string UserName

    {

        get

        {

            return _userName;

        }

        set

        {

            _userName = value;

        }

    }

    /// <summary>

    /// Propertylist中數組請定義該類中屬性,并確保名稱唯一性

    /// 以及與XTM_User中SelectXTM_UserByKey_Test中查詢名稱統一

    /// </summary>

    public string[] Propertylist

    {

        get

        {

            return new string[] { "UserName", "DID" };

        }

    }

}

2.      XTM_User.xml

<?xml version='1.0' encoding='UTF-8' ?>

<sqlMap namespace='XTM_User' xmlns="aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="ODRM_test" %>

<%@ Register Assembly="NickLee.Web.UI" Namespace="NickLee.Web.UI" TagPrefix="NickLee" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "

<html xmlns="

<head runat="server">

    <title>Object/DataSet Relational Mapping(對象/數據集關系映射)</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <NickLee:ExDataGrid ID="ExDataGrid1" runat="server" OnItemDataBound="ExDataGrid1_ItemDataBound">

        </NickLee:ExDataGrid></div>

    </form>

</body>

</html>

4.      test.aspx.cs

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

using IBatisNet.DataMapper;

using System.Reflection;

 

public partial class ODRM_test : PageBase

{

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!IsPostBack)

        {

            DataSet set11 = Mapper.Instance().QueryForDataSet("SelectXTM_UserByKey_Test",UIhashtable);

            DataTable table1 = ConvertDataTable(set11, "");

            //這里為自己定義的序列化類

            cXTM_User[] objModel = new cXTM_User[table1.Rows.Count];

            //DataTable轉化為序列化類數組

            for (int y = 0; y < table1.Rows.Count; y++)

            {

                objModel[y] = new cXTM_User();

                DataTableReturnOO(table1.Rows[y], objModel[y]);

            }

            //以DataSet模式綁定

            ExDataGrid1.DataSource = table1;

            //以序列化對象模式綁定

            //ExDataGrid1.DataSource = objModel;

            ExDataGrid1.DataBind();

        }

    }

 

    protected void ExDataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)

    {

        /*

         * 該部分應用范圍

         * 查詢一條數據的修改,可以用objModel.UserName

         * 而不必再使用DataTable[0].Rows[0]["UserName"]的模式

         * 提高面向對象的程度,并減少業務流程部分編碼

         */

 

        if (e.Item.ItemIndex != -1)

        {

            cXTM_User objModel = new cXTM_User();

           

            //如果為DataSet填充的DataGrid

            if (e.Item.DataItem.GetType().FullName == "System.Data.DataRowView")

            {

                DataTableReturnOO((DataRow)((DataRowView)e.Item.DataItem).Row, objModel);     

            }

            //否則認為為序列化對象填充

            else

            {

                objModel = (cXTM_User)e.Item.DataItem;

                  

            }

        }

    }

 

    /// <summary>

    /// DataSet轉化為序列化類函數,類定義參考cXTM_User

    /// </summary>

    private void DataTableReturnOO(DataRow row, cXTM_User objModel)

    {

        Hashtable hTable = new Hashtable();

        hTable = ReturnHashtable(row);

 

        Type entitytype = Type.GetType(objModel.GetType().AssemblyQualifiedName);

 

        for (int j = 0; j < objModel.Propertylist.Length; j++)

        {

            PropertyInfo propertyinfo = entitytype.GetProperty(objModel.Propertylist[j]);

            propertyinfo.SetValue(objModel, hTable[objModel.Propertylist[j]], null);

        }

 

    }

 

    /// <summary>

    /// 轉換為DataTable

    /// </summary>

    /// <param name="Source">數據源</param>

    /// <param name="DataMember">數據表名稱</param>

    public static DataTable ConvertDataTable(object Source, string DataMember)

    {

        DataTable baseTable = new DataTable();

        if (Source is DataTable)

        {

            baseTable = (DataTable)Source;

            return baseTable;

        }

        if (Source is DataSet)

        {

 

            DataSet set1 = (DataSet)Source;

            if ((set1.Tables.Count > 1) && ((DataMember == null) || (DataMember == "")))

            {

                throw new Exception("If there is more than one table in your dataset, you must define the DataMember property to specify which table to use.");

            }

            if (set1.Tables.Count < 1)

            {

                throw new Exception("There are no tables in the datasource.");

            }

            if ((DataMember != null) && (DataMember != ""))

            {

                baseTable = set1.Tables[DataMember];

                return baseTable;

            }

            else

            {

                baseTable = set1.Tables[0];

                return baseTable;

            }

          

        }

        return baseTable;

    }

 

    /// <summary>

    /// 返回DataTable為哈希表鍵值對

    /// </summary>

    /// <param name="SourceTable">數據行對象</param>

    /// <returns></returns>

    public static Hashtable ReturnHashtable(DataRow SourceRow)

    {

        Hashtable hTable = new Hashtable();

        IList list = SourceRow.ItemArray;

        object[] tObj = new object[SourceRow.Table.Columns.Count];

 

        for (int i = 0; i < SourceRow.Table.Columns.Count; i++)

        {

            tObj[SourceRow.Table.Columns.IndexOf(SourceRow.Table.Columns[i].ColumnName)] = SourceRow.Table.Columns[i].ColumnName;

        }

 

        for (int x = 0; x < list.Count; x++)

        {

            hTable.Add(tObj[x].ToString(), list[x]);

        }

        return hTable;

    }

 

}

5.      PageBase.cs

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

using System.Reflection;

using System.Text;

using System.Collections;

 

//namespace可要可不要

//namespace Framework.Web.Uiprocess

//{

/// <summary>

/// PageBase 的摘要說明

/// </summary>

/// <summary>

/// 頁面層(表示層)基類,所有頁面繼承該頁面

/// </summary>

    public class PageBase : System.Web.UI.Page

    {

 

 

        #region 整個系統存在部分

        private string _baseselect;

        /// <summary>

        /// 查詢字段

        /// </summary>

        protected string baseselect

        {

            get

            {

                // TODO: 添加 BaseRule.OperationCode getter 實現

                return _baseselect;

            }

            set

            {

                // TODO: 添加 BaseRule.OperationCode setter 實現

                _baseselect = value;

            }

        }

        /// <summary>

        /// 基類哈希表,在整個系統中存在

        /// </summary>

        protected Hashtable baseHashtable = new Hashtable();

        /// <summary>

        /// 界面哈希表,獲取UI工廠獲取的控件和控件值

        /// </summary>

        protected Hashtable UIhashtable = new Hashtable();

        /// <summary>

        /// 出錯提示,默認值""

        /// </summary>

        protected string errMsg = "";

        /// <summary>

        /// 出錯狀態,默認值false

        /// </summary>

        protected bool errState = false;

        /// <summary>

        /// 私有變量_UISet

        /// </summary>

        private DataSet _UISet = new DataSet();

        /// <summary>

        /// 界面層數據集

        /// </summary>

        protected DataSet UISet

        {

            get

            {

                // TODO: 添加 BaseRule.OperationCode getter 實現

                return _UISet;

            }

            set

            {

                // TODO: 添加 BaseRule.OperationCode setter 實現

                _UISet = value;

            }

        }

        private DataTable _UITable = new DataTable();

        /// <summary>

        /// 界面層數據表

        /// </summary>

        protected DataTable UITable

        {

            get

            {

                // TODO: 添加 BaseRule.OperationCode getter 實現

                return _UITable;

            }

            set

            {

                // TODO: 添加 BaseRule.OperationCode setter 實現

                _UITable = value;

            }

        }

 

        private string _pageTitle = "";

        /// <summary>

        /// 頁面標題

        /// </summary>

        protected string pageTitle

        {

            get

            {

                // TODO: 添加 BaseRule.OperationCode getter 實現

                return _pageTitle;

            }

            set

            {

                // TODO: 添加 BaseRule.OperationCode setter 實現

                _pageTitle = value;

            }

        }

        #endregion

 

        #region 查詢頁面存在部分

        /// <summary>

        /// List頁面基類哈希表

        /// </summary>

        protected Hashtable baseListHashtable = new Hashtable();

        /// <summary>

        /// 頁面總數.變量.1000w、10000w數據集使用

        /// </summary>

        protected int pageCount;

 

        /// <summary>

        /// 記錄總數.變量.1000w、10000w數據集使用

        /// </summary>

        protected int recordCount;

        /// <summary>

        /// 記錄總數.屬性.1000w、10000w數據集使用

        /// </summary>

        protected int RecordCount

        {

            get

            {

                return recordCount;

            }

        }

        #endregion

 

        #region 編輯頁面存在部分

        /// <summary>

        /// Edit頁面基類哈希表

        /// </summary>

        protected Hashtable baseEditHashtable = new Hashtable();

        /// <summary>

        /// Edit頁面,編輯數據哈希表

        /// </summary>

        protected Hashtable baseEditFillHashtable = new Hashtable();

        #endregion

 

 

        /// <summary>

        /// 構造函數

        /// </summary>

        public PageBase()

        {

            this.Load += new EventHandler(PageBase_Load);

        }

 

        private void PageBase_Load(object sender, EventArgs e)

        {

            if (!Page.IsPostBack)

            {

 

                //整個流程需要的控制部分

                if (session["baseHashtable"] != null)

                {

                    //從Session中獲取哈希對象列表

                    baseHashtable = (Hashtable)Session["baseHashtable"];

                }

 

                //編輯頁面訪問權限和訪問控制,只在第一次載入頁面的時候有效

                if (Session["baseEditHashtable"] != null)

                {

                    //獲取Edit頁面哈希對象列表

                    baseEditHashtable = (Hashtable)Session["baseEditHashtable"];

                    //獲取完后釋放對應Session對象

                    Session.Remove("baseEditHashtable");

                }

                else

                {

                    //如果為初始狀態,新增是否安全編輯狀態值,默認值false,不安全

                    baseEditHashtable.Add("EditSafeState", false);

                }

            }

 

            //查詢頁面訪問控制

            if (Session["baseListHashtable"] != null)

            {

                //獲取Edit頁面哈希對象列表

                baseListHashtable = (Hashtable)Session["baseListHashtable"];

                //獲取完后釋放對應Session對象

                Session.Remove("baseListHashtable");

            }

            else

            {

                //如果為初始狀態,新增是否刷新查詢頁面,默認值false,不刷新

                baseListHashtable.Add("IsRefresh", false);

            }

        }

 

 

        #region UI通用函數

        /// <summary>

        /// 拋出出錯消息提示

        /// </summary>

        /// <param name="page">頁面</param>

        /// <param name="errMsg">出錯消息</param>

        protected void throwErrMsg(Page page, string errMsg)

        {

            page.Response.Write("<script>window.alert(/"" + errMsg.Replace("/"", "'") + "/");</script>");

        }

 

        /// <summary>

        /// 刷新打開編輯窗體的List頁面

        /// </summary>

        /// <param name="page">頁面</param>

        protected void parentPageRefresh(Page page)

        {

            StringBuilder scriptString = new StringBuilder();

            scriptString.Append("<script language = Javascript>");

            //調用Function.js中的refresh()刷新父窗體

            scriptString.Append("window.opener.refresh(false,/"/");");

 

            scriptString.Append(" window.focus();");

            scriptString.Append(" window.opener=null;");

            scriptString.Append(" window.close(); ");

 

            scriptString.Append("</" + "script>");

            page.Response.Write(scriptString.ToString());

        }

 

        /// <summary>

        /// 重置頁面

        /// </summary>

        /// <param name="page">頁面</param>

        protected void pageReset(Page page)

        {

            StringBuilder scriptString = new StringBuilder();

            scriptString.Append("<script language = javascript>");

 

            scriptString.Append(" this.location.reset(); ");

 

            scriptString.Append("</" + "script>");

            page.Response.Write(scriptString.ToString());

        }

 

        /// <summary>

        /// js界面工廠傳入后生成Hashtable

        /// </summary>

        /// <param name="splitStr">js界面工廠傳入字符串</param>

        /// <returns></returns>

        public Hashtable AjaxUIFactory(string splitStr)

        {

            string[] fristStr = splitStr.Split(',');

            Hashtable table = new Hashtable();

            for (int x = 0; x < fristStr.Length; x++)

            {

                string[] secondStr = fristStr[x].Split('|');

                if (secondStr.Length == 3)

                {

                    //取截取后字符串和值

                    table.Add(secondStr[1], secondStr[2]);

                }

            }

            return table;

        }

        #endregion

}

http://www.survivalescaperooms.com/mail-ricklee/archive/2006/11/23/569270.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴文县| 玉溪市| 霸州市| 高雄县| 永德县| 汉沽区| 焉耆| 县级市| 台江县| 云阳县| 乐亭县| 阿图什市| 山阳县| 澄江县| 秀山| 罗城| 汤原县| 翁牛特旗| 弋阳县| 乌拉特后旗| 和硕县| 宾川县| 平舆县| 洮南市| 策勒县| 邹城市| 银川市| 喜德县| 土默特左旗| 西安市| 金坛市| 介休市| 奉贤区| 上犹县| 通河县| 祁门县| 纳雍县| 鸡东县| 大新县| 甘洛县| 凌云县|