В области разработки .Net вас и вашу компанию беспокоят следующие проблемы:
1. DataRow в DataSet может получать данные только в форме DataTable[0].Rows[0]["Name"]
2. Конфигурация Sql
?Sql не является динамичным и понятным.
3. Используйте ORM JAVA для разработки .Net и используйте уровень объекта. Каждая модификация повлияет на отраженный объект.
Тогда, пожалуйста, продолжайте читать следующую статью
Реляционное сопоставление объектов/наборов данных
(реляционное сопоставление объектов/наборов данных).
Режим NickLee.ODRM может хорошо решить вышеуказанные проблемы
. 1. DataRow в DataSet может быть только DataTable[0].Rows[0][" Имя"] метод для получения
решения для данных: DataRow преобразуется в сериализованный объект, но сериализованный объект используется только как объект операции с четким объектом для обработки бизнес-суждений и данных
2. Конфигурация Sql не является динамической и неясной лоскутной реакцией Sql
: используя архитектуру уровня данных IBatisNet, используя динамический синтаксис SQL IBatisNet, но возвращая DataSet
3. Используйте ORM JAVA для разработки .Net и используйте объектный уровень. Каждая модификация повлияет на отраженный объект.
Решение: очистить O (слой объекта), нет механизма отражения, избегать изменений слоя объекта при каждой модификации.
Подробное объяснение приведено ниже.
Следующая демонстрация кода будет включена в NickLee.Framework.2.0.1.2 и выше. Конечно, мы предоставляем только идею и гибкое решение, которое отражает только мышление команды TheFallAngel.
DLL, на которую необходимо ссылаться
IBatisNet (версия 1.5 и более поздние версии) с модифицированной версией NickLee.Framework
NickLee.Web.UI (версия 2006.2.1447 и более поздние версии)
1. cXTM_User.cs
с использованием System.Data
с
использованием System.Configuration ;
использование System.Web;
использование
System.Web.UI;
использование System.Web.UI.WebControls;
использование System.Web.UI.HtmlControls
;
///
/// cXTM_User.Serialization
///
[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;
///
Пожалуйста
,
определите
свойства в этом классе для массива в списке свойств и убедитесь, что имя уникально
/// и соответствует имени запроса в SelectXTM_UserByKey_Test в XTM_User
///
public string[] Propertylist
{
get
{
return new string[ ] { " UserName", "DID" };
}
}
}
2. XTM_User.xml
ВЫБЕРИТЕ
первые 5
[DID],
[UserName],
[LoginName],
[PWD],
[LoginFlag],
[StopFlag],
[LoginTime],
[LASTUPDATE]
FROM [XTM_User]
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" %>
http://www.w3.org/TR/xhtml1/DTD /xhtml1-transitional.dtd ">
http://www.w3.org/1999/xhtml " >
4. test.aspx.cs
с использованием System.Data
;
сиспользованием
System.Collections
;
Web;
используя System.Web.Security;
используя
System.Web.UI.WebControls;
используя System.Web.UI.HtmlControls
;
использование IBatisNet.DataMapper
с использованием System.Reflection;
общедоступный частичный класс ODRM_test: PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataSet11 = Mapper.Instance().QueryForDataSet("SelectXTM_UserByKey_Test",UIhashtable table1
= ConvertDataTable(set11, ")
;");
//Вот самоопределяемый класс сериализации
cXTM_User[] objModel = new cXTM_User[table1.Rows.Count];
//DataTable преобразуется в массив классов сериализации
для (int y = 0; y < table1.Rows . Count; y++)
{
objModel[y] = new cXTM_User();
DataTableReturnOO(table1.Rows[y], objModel[y]);
//
ПривязкаExDataGrid1.DataSource = table1
в режиме DataSet
; привязка
//ExDataGrid1.DataSource = objModel
ExDataGrid1.DataBind(
)
;
protected void ExDataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
/*
* Область применения этой части
* Чтобы запросить изменение части данных, вы можете использовать objModel.UserName
* вместо использования DataTable[0].Rows[0] ["UserName"] Шаблон
* Повысить степень объектно-ориентированности и сократить часть кодирования бизнес-процессов
*/
если (e.Item.ItemIndex!= -1)
{
cXTM_User objModel = новый cXTM_User();
//Если DataGrid заполнен для DataSet
if (e.Item.DataItem.GetType().FullName == "System.Data.DataRowView")
{
DataTableReturnOO((DataRow)((DataRowView)e.Item.DataItem). Row, objModel);
}
//В противном случае он считается сериализованным объектом, заполненным
else
{
objModel = (cXTM_User)e.Item.DataItem;
}
}
}
///
/// DataSet преобразуется в функцию класса сериализации, определение класса ссылается на cXTM_User
///
Private void DataTableReturnOO(DataRow row, cXTM_User objModel)
{
Hashtable hTable = new Hashtable();
hTable = ReturnHashtable (строка);
Введите тип объекта = Type.GetType(objModel.GetType().AssemblyQualifiedName);
for (int j = 0; j { PropertyInfo propertyinfo =entitytype.GetProperty(objModel.Propertylist[j]); propertyinfo.SetValue(objModel, hTable[objModel.Propertylist[j]], null } } /// /// Преобразование в DataTable /// /// Источник данных /// Имя таблицы данных public static DataTable ConvertDataTable (объект Source, string DataMember) { DataTable baseTable = новый DataTable (); если (Источник 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("Если существует более одного table в вашем наборе данных, вы должны определить свойство DataMember, чтобы указать, какую таблицу использовать."); } if (set1.Tables.Count < 1) { throw new Exception("В источнике данных нет таблиц."); } if ((DataMember!= null) && (DataMember!= "")) { baseTable = set1.Tables[DataMember]; return baseTable; } else { baseTable = set1.Tables[0 ] ; } вернуть базовую таблицу ; /// /// Возвращаем DataTable как пару ключ-значение хэш-таблицы /// /// Объект строки данных /// public static Hashtable ReturnHashtable(DataRow SourceRow) { Hashtable hTable = новый список Hashtable( ) ; for (int i = 0; i < SourceRow.Table.Columns.Count; i++) { tObj[SourceRow.Table.Columns.IndexOf(SourceRow.Table.Columns[i].ColumnName)] = SourceRow.Table.Columns[i ].ИмяКолонки } for (int x = 0; x < list.Count; x++) { hTable.Add(tObj[x].ToString(), list[x] } return hTable } } 5. PageBase.cs с помощью System.Data; с System.Web ; с помощью System.Web.UI ; помощью System.Web.UI.WebControls; Web.UI.WebControls.WebParts с использованием System.Web.UI.HtmlControls; использование System.Reflection; использование System.Text; использование System.Collections; //требуется пространство имен //пространство имен Framework.Web.UIProcess //{ /// /// Краткое описание PageBase /// /// /// Уровень страницы ( Уровень представления ) базовый класс, все страницы наследуют эту страницу /// public class PageBase : System.Web.UI.Page { #region Вся система имеет некоторую приватную строку _baseselect; /// /// Поле запроса /// protected string baseselect { get { // TODO: Добавить метод получения BaseRule.OperationCode для реализации return _baseselect } set { // TODO: Добавить установщик BaseRule.OperationCode для реализации _baseselect = value } } /// /// Хэш-таблица базового класса, существует во всей системе /// protected Hashtable baseHashtable = new Hashtable( ); /// /// Хэш-таблица интерфейса, получает элементы управления и значения элементов управления, полученные от фабрики пользовательского интерфейса /// protected Hashtable UIhashtable = new Hashtable(); /// /// Подсказка об ошибке, значение по умолчанию "" /// protected string errMsg = "" /// /// Статус ошибки, значение по умолчанию false /// protected bool errState = false / // /// Частная переменная _UISet /// Private DataSet _UISet = new DataSet() /// /// Набор данных уровня интерфейса /// ; protected DataSet UISet { get { // TODO: добавить метод получения BaseRule.OperationCode для реализации return _UISet } set { добавить метод установки BaseRule.OperationCode для реализации _UISet = value; } } Private DataTable _UITable = new DataTable(); // /// Таблица данных уровня интерфейса /// protected DataTable UITable { get { // TODO: добавить метод получения BaseRule.OperationCode для реализации return _UITable } set { // TODO: добавить BaseRule.OperationCode; установщик для реализации _UITable = value } } Private string _pageTitle = ""; /// /// Название страницы /// protected string pageTitle { get { метод получения BaseRule.OperationCode для реализации return _pageTitle ; TODO: Добавьте установщик BaseRule.OperationCode для реализации _pageTitle = value; } } #endregion; #region Запросить существующую часть страницы /// /// Список хеш-таблиц базового класса страницы /// protected Hashtable baseListHashtable = new Hashtable(); /// /// Total количество страниц переменных 1000w, 10000w использование набора данных /// protected int pageCount; /// /// Общее количество записей. Переменные. Использование наборов данных 1000w и 10000w /// protected int RecordCount; /// /// Общее количество записей. Наборы данных 1000w и 10000w Используйте /// protected int RecordCount { get { return RecordCount } } #endregion; #region Существующая часть страницы редактирования /// /// Хэш-таблица базового класса страницы редактирования /// protected Hashtable baseEditHashtable = new Hashtable(); /// /// Edit страница, Редактировать хэш-таблицу данных /// Hashtable (); /// /// Конструктор /// public PageBase() { this.Load += new EventHandler(PageBase_Load }) ; Private void PageBase_Load (отправитель объекта, EventArgs e) { if (!Page.IsPostBack) { //Управляющая часть, необходимая для всего процесса if (Session["baseHashtable"] != null) { //Получаем список хэш-объектов из сеанса baseHashtable = (Hashtable)Session["baseHashtable"] } //Права доступа к странице редактирования и контроль доступа действительны только при первой загрузке страницы if (Session["baseEditHashtable"] != null) { //Получаем список хеш-объектов страницы редактирования baseEditHashtable = (Hashtable)Session[ "baseEditHashtable"]; //Освободите соответствующий объект сеанса после получения Session.Remove("baseEditHashtable" } else { // Если это начальное состояние, добавьте, безопасно ли редактировать значение состояния, значение по умолчанию: false, это небезопасно baseEditHashtable.Add ("EditSafeState", false } } ) //Управление доступом к странице запроса if (Session["baseListHashtable"] != null) { //Получаем список объектов хэша страницы редактирования baseListHashtable = (Hashtable)Session["baseListHashtable"]; //Освобождаем соответствующий объект сеанса после получения . .Remove("baseListHashtable"); } else { //Если это исходное состояние, добавьте, нужно ли обновлять страницу запроса, значение по умолчанию — false, baseListHashtable не будет обновляться.Add("IsRefresh", false } ; } #region Общая функция пользовательского интерфейса /// /// Выдать сообщение об ошибке /// /// Page /// Сообщение об ошибке protected void throwErrMsg(Page page, string errMsg) { page.Response.Write(""); } /// /// Обновляем страницу списка, открывающую форму редактирования /// /// Page protected void родительPageRefresh(Page page) { StringBuilder scriptString = new StringBuilder(); scriptString.Append("