繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> Asp.Net开发 >> Object/DataSet Relational Mapping(对象/数据集关系映射1

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

2007-10-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:在.Net的开发领域,您和您的公司是不是在为以下问题所困扰 1.DataSet中DataRow只能以DataTable[0].Rows[0][“Name”]的方式获取数据 2.Sql配置的不动态,不清晰的Sql拼凑 3.使用JAVA 的ORM设计.Net,使用对象层,...

在.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;

///

/// cXTM_User.序列化

///

[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;

}

}

///

/// Propertylist中数组请定义该类中属性,并确保名称唯一性

/// 以及与XTM_User中SelectXTM_UserByKey_Test中查询名称统一

///

public string[] Propertylist

{

get

{

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

}

}

}

2. XTM_User.XML

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" %>

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

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;

}

}

}

做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。

责任编辑:admin
相关文章