using System;
using System.Collections;
using System.Linq;
using System.Reflection;
using System.Collections.Generic;
using com.tg.framework.common;
using System.Xml;
namespace com.tg.framework.core
{
/// <summary>
/// This is the class of data model.
/// </summary>
public class DataModel : IDataModel
{
#region Constants and Fields
/// <summary>
/// define the object id in run time
/// </summary>
protected string _OID = null;
/// <summary>
/// create time
/// </summary>
protected DateTime? CreateTime;
/// <summary>
/// the login id of modify
/// </summary>
protected string ByLoginId;
/// <summary>
/// the login name of modify
/// </summary>
protected string ByLoginName;
/// <summary>
/// last updated time
/// </summary>
protected DateTime? UpdateTime;
/// <summary>
/// remote address of operator
/// </summary>
protected string ByRemoteAddress;
/// <summary>
/// record the create time or update time to table
/// </summary>
private bool _UseRecordTime = false;
/// <summary>
/// record the information of client, ex: loginid, loginname, remote address....
/// </summary>
private bool _UseRecordClient = false;
/// <summary>
/// the deafult status is new.
/// </summary>
protected DataModelStatus _Status = DataModelStatus.New;
#endregion
#region Constructors and Destructors
/// <summary>
/// Initializes a new instance of the DataModel class.
/// </summary>
public DataModel()
{
this._OID = System.Guid.NewGuid().ToString();
this._Status = DataModelStatus.New;
}
/// <summary>
/// Initializes a new instance of the DataModel class.
/// </summary>
/// <param name="hashtable">parameter -- hashtable</param>
public DataModel(Hashtable hashtable)
{
Todo, init a object from hashtable
}
/// <summary>
/// Initializes a new instance of the DataModel class.
/// </summary>
/// <param name="keys">parameter -- keys</param>
/// <param name="values">parameter -- values</param>
public DataModel(string[] keys, object[] values)
{
Todo, init a object from keys and values
}
#endregion
/// <summary>
/// Define the status of datamodel
/// </summary>
public enum DataModelStatus
{
FromDB, New, Update, Remove
}
#region Public Methods
/// <summary>
/// Parsing object to hashtable
/// </summary>
/// <returns>return hashtable</returns>
public Hashtable ToHashtable()
{
return DataObject.ParseObjectToHashtable(this);
}
/// <summary>
/// Parsing object to keys
/// </summary>
/// <returns>return string array</returns>
public string[] ToKeys()
{
return this.GetModelFields();
}
/// <summary>
/// Parsing object to values
/// </summary>
/// <returns>return object array</returns>
public object[] ToValues()
{
return this.GetModelValues();
}
/// <summary>
/// Parsing object to xml
/// </summary>
/// <returns>return xml string</returns>
public XmlDocument ToXml()
{
return DataObject.ParseObjectToXml(this);
}
/// <summary>
/// New model id
/// </summary>
public void NewModelId()
{
this._OID = System.Guid.NewGuid().ToString();
}
/// <summary>
/// Get model id
/// </summary>
/// <returns>return model id</returns>
public string GetModelId()
{
return this._OID;
}
/// <summary>
/// Get model name
/// </summary>
/// <returns>return model name</returns>
public string GetModelName()
{
return this.GetType().Name;
}
/// <summary>
/// Get model status
/// </summary>
/// <returns>return model status</returns>
public DataModelStatus GetModelStatus()
{
return this._Status;
}
/// <summary>
/// Set model status
/// </summary>
/// <param name="status">parameter -- status</param>
public void SetModelStatus(DataModelStatus status)
{
this._Status = status;
}
/// <summary>
/// Get model create time
/// </summary>
/// <returns>return the create time</returns>
public DateTime? GetCreateTime()
{
return this.CreateTime;
}
/// <summary>
/// Set model create time
/// </summary>
/// <param name="date">parameter -- date</param>
public void SetCreateTime(DateTime date)
{
this.CreateTime = date;
}
/// <summary>
/// Get model update time
/// </summary>
/// <returns>return the update time</returns>
public DateTime? GetUpdateTime()
{
return this.UpdateTime;
}
/// <summary>
/// Set model update time
/// </summary>
/// <param name="date">parameter -- date</param>
public void SetUpdateTime(DateTime date)
{
this.UpdateTime = date;
}
/// <summary>
/// get the login id of modify
/// </summary>
/// <returns>return the login id of modify</returns>
public string GetByLoginId()
{
return this.ByLoginId;
}
/// <summary>
/// set the login id
/// </summary>
/// <param name="id">login id</param>
public void SetByLoginId(string id)
{
this.ByLoginId = id;
}
/// <summary>
/// Get model login name of modify
/// </summary>
/// <returns>return the address</returns>
public string GetByLoginName()
{
return this.ByLoginName;
}
/// <summary>
/// Set model login name of modify
/// </summary>
/// <param name="loginName">login name</param>
public void SetByLoginName(string loginName)
{
this.ByLoginName = loginName;
}
/// <summary>
/// Get model remote address of modify
/// </summary>
/// <returns>return the address</returns>
public string GetByRemoteAddress()
{
return this.ByRemoteAddress;
}
/// <summary>
/// Set model remote address of modify
/// </summary>
/// <param name="address">parameter -- address</param>
public void SetByRemoteAddress(string address)
{
this.ByRemoteAddress = address;
}
/// <summary>
/// Get model using record time
/// </summary>
/// <returns>return the result</returns>
public bool GetModelUseRecordTime()
{
return this._UseRecordTime;
}
/// <summary>
/// Set model using record time
/// </summary>
/// <param name="use">parameter -- use</param>
public void SetModelUseRecordTime(bool use)
{
this._UseRecordTime = use;
}
/// <summary>
/// Get model using record client
/// </summary>
/// <returns>return the result</returns>
public bool GetModelUseRecordClient()
{
return this._UseRecordClient;
}
/// <summary>
/// Set model using record client
/// </summary>
/// <param name="use">parameter -- use</param>
public void SetModelUseRecordClient(bool use)
{
this._UseRecordClient = use;
}
/// <summary>
/// Get model object fileds
/// </summary>
/// <returns>return the string array of model object fields</returns>
public string[] GetModelFields()
{
Type type = this.GetType();
Get all attributes of the class
FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.IgnoreCase | BindingFlags.Instance);
remove system reserve fields, ex: _CreateTime
var valiableFields = fields.Where(p => p.Name.IndexOf("_") < 0);
new a return array
var fieldsReturn = new string[valiableFields.Count()];
get field name from each fieldinfo
int i = 0;
foreach (FieldInfo field in valiableFields)
{
fieldsReturn[i] = field.Name;
i++;
}
return fieldsReturn;
}
/// <summary>
/// Get model object values
/// </summary>
/// <returns>return the array of model object</returns>
public object[] GetModelValues()
{
var type = this.GetType();
Get all attributes of the class
var fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.IgnoreCase | BindingFlags.Instance);
remove system reserve fields, ex: _CreateTime
var valiableFields = fields.Where(p => p.Name.IndexOf("_") < 0);
new a return array
var fieldsValues = new object[valiableFields.Count()];
get field name from each fieldinfo
var i = 0;
foreach (var field in valiableFields)
{
fieldsValues[i] = field.GetValue(this);
i++;
}
return fieldsValues;
}
/// <summary>
/// get a value of model from FieldName
/// </summary>
/// <param name="fieldName">FieldName, AttributeName</param>
/// <returns>the value of attribute</returns>
public object GetModelValue(string fieldName)
{
return this.GetType().GetField(fieldName).GetValue(this);
}
/// <summary>
/// get a value of model from FieldName
/// </summary>
/// <param name="fieldName">FieldName, AttributeName</param>
/// <param name="value">value of </param>
public void SetModelValue(string fieldName, object value)
{
this.GetType().GetField(fieldName).SetValue(this, value);
}
/// <summary>
/// Get update fields of model objects
/// </summary>
/// <param name="fields">parameter -- object fields</param>
/// <param name="objects">parameter -- objects</param>
public void GetModelUpdatedFields(out string[] fields, out object[] objects)
{
var type = this.GetType();
Get all attributes of the class
var fieldsInfo = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.IgnoreCase | BindingFlags.Instance);
remove system reserve fields, ex: _CreateTime
var valiableFields = fieldsInfo.Where(p => p.Name.IndexOf("_") < 0 & p.GetValue(this) != null & p.Name != LayerHelper.GeneralLayer.IdentifyName);
var count = valiableFields.Count();
/* use create time and update time
if (this.GetModelUseRecordTime())
{
count = count + 1;
}
use creator and updator and remoteaddress
if (this.GetModelUseRecordClient())
{
count = count + 3;
}
*/
new a return array
fields = new string[count];
objects = new object[count];
get field name from each fieldinfo
int i = 0;
foreach (FieldInfo field in valiableFields)
{
fields[i] = field.Name;
objects[i] = field.GetValue(this);
i++;
}
/*
use create time and update time
if (this.GetModelUseRecordTime())
{
fields[i] = LayerConstant.DataModelFieldUpdateTime;
objects[i] = System.DateTime.Now;
i = i + 1;
}
use creator and updator and remoteaddress
if (this.GetModelUseRecordClient())
{
fields[i] = LayerConstant.DataModelFieldLoginID;
objects[i] = GlobalObject.GetLoginID();
fields[i + 1] = LayerConstant.DataModelFieldLoginName;
objects[i + 1] = GlobalObject.GetLoginName();
fields[i + 2] = LayerConstant.DataModelFieldRemoteAddress;
objects[i + 2] = GlobalObject.GetRemoteAddress();
i = i + 3;
}
*/
}
/// <summary>
/// Get avaiable fields of model objects
/// </summary>
/// <param name="fields">parameter -- object fields</param>
/// <param name="objects">parameter -- objects</param>
public void GetModelAvaiableFields(out string[] fields, out object[] objects)
{
Type type = this.GetType();
Get all attributes of the class
FieldInfo[] fieldsInfo = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.IgnoreCase | BindingFlags.Instance);
remove system reserve fields, ex: _CreateTime
var valiableFields = fieldsInfo.Where(p => p.Name.IndexOf("_") < 0 & p.GetValue(this) != null);
var count = valiableFields.Count();
/* use create time and update time
if (this.GetModelUseRecordTime())
{
count = count + 2;
}
use creator and updator and remoteaddress
if (this.GetModelUseRecordClient())
{
count = count + 3;
}
*/
new a return array
fields = new string[count];
objects = new object[count];
get field name from each fieldinfo
int i = 0;
foreach (FieldInfo field in valiableFields)
{
fields[i] = field.Name;
objects[i] = field.GetValue(this);
i++;
}
/*
use create time and update time
if (this.GetModelUseRecordTime())
{
fields[i] = LayerConstant.DataModelFieldCreateTime;
objects[i] = System.DateTime.Now;
fields[i + 1] = LayerConstant.DataModelFieldUpdateTime;
objects[i + 1] = System.DateTime.Now;
i = i + 2;
}
use creator and updator and remoteaddress
if (this.GetModelUseRecordClient())
{
fields[i] = LayerConstant.DataModelFieldLoginID;
objects[i] = GlobalObject.GetLoginID();
fields[i + 1] = LayerConstant.DataModelFieldLoginName;
objects[i + 1] = GlobalObject.GetLoginName();
fields[i + 2] = LayerConstant.DataModelFieldRemoteAddress;
objects[i + 2] = GlobalObject.GetRemoteAddress();
i = i + 3;
}
*/
}
/// <summary>
/// Get avaiable fields of model objects
/// </summary>
/// <param name="sql">parameter -- sql</param>
/// <returns>return the list of IDataModel</returns>
public List<IDataModel> GetBySql(string sql)
{
List<IDataModel> iDataModel = new List<IDataModel>();
return iDataModel;
}
#endregion
}
}
DataModel
最新推荐文章于 2018-07-16 17:30:59 发布