设为首页
加入收藏
站内地图
旧版入口
当前位置:首页 > 站长学院 > 网络编程 > ASP.NET

Object/DataSet Relational Mapping(对象/数据集关系映射1

作者:佚名 出处:网络转载 时间:11-24 点击:

内容载入中...
     在.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="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  
  <statements>
  
   <select id='SelectXTM_UserByKey_Test' parameterClass='System.Collections.Hashtable'>
  
   SELECT
  
   Top 5
  
   [DID],
  
   [UserName],
  
   [LoginName],
  
   [PWD],
  
   [LoginFlag],
  
   [StopFlag],
  
   [LoginTime],
  
   [LASTUPDATE]
  
   FROM [XTM_User]
  
   </select>
  
  </statements>
  
  </sqlMap>
  
  
  
  3. test.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" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  
  <html xmlns="http://www.w3.org/1999/xhtml" >
  
  <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;
  
  
  
   }
  
   }
  
   }
  
  
    。

收藏本文:
】【打印页面】【推荐给朋友】【关闭窗口

站长学院

推荐信息