ZhiYeJianKang_PeiXun/cyqdata-master/Orm/SimpleOrmBase.cs

834 lines
26 KiB
C#
Raw Normal View History

2025-02-20 15:41:53 +08:00
using System;
using System.Collections.Generic;
using CYQ.Data.Table;
using System.Reflection;
using CYQ.Data.Tool;
using CYQ.Data.SQL;
using System.Data;
using CYQ.Data.Aop;
using CYQ.Data.UI;
using CYQ.Data.Json;
namespace CYQ.Data.Orm
{
///// <summary>
///// ORM CodeFirst <20>ֶ<EFBFBD><D6B6><EFBFBD>Դ
///// </summary>
//public enum FieldSource
//{
// /// <summary>
// /// <20><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// /// </summary>
// Property,
// /// <summary>
// /// <20><><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// /// </summary>
// Data,
// /// <summary>
// /// <20>ۺ<EFBFBD><DBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// /// </summary>
// BothOfAll
//}
/// <summary>
/// <20><><EFBFBD><EFBFBD>ORM<52><4D><EFBFBD><EFBFBD><E0A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>ʵ<EFBFBD><CAB5>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><C2BB><EFBFBD><EFBFBD>
/// </summary>
public abstract class SimpleOrmBase<T> : SimpleOrmBase where T : class
{
public new T Get(object where)
{
return base.Get<T>(where);
}
public new List<T> Select()
{
return base.Select<T>();
}
public new List<T> Select(int pageIndex, int pageSize)
{
return base.Select<T>(pageIndex, pageSize);
}
public new List<T> Select(int topN, string where)
{
return base.Select<T>(topN, where);
}
public new List<T> Select(string where)
{
return base.Select<T>(where);
}
public new List<T> Select(int pageIndex, int pageSize, string where)
{
return base.Select<T>(pageIndex, pageSize, where);
}
public new List<T> Select(int pageIndex, int pageSize, string where, out int count)
{
return base.Select<T>(pageIndex, pageSize, where, out count);
}
}
internal class SimpleOrmBaseDefaultInstance : SimpleOrmBase
{ }
/// <summary>
/// <20><><EFBFBD><EFBFBD>ORM<52><4D><EFBFBD><EFBFBD><E0A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>ʵ<EFBFBD><CAB5>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><C2BB><EFBFBD><EFBFBD>
/// </summary>
public abstract class SimpleOrmBase : IDisposable
{
OrmBaseInfo _BaseInfo;
/// <summary>
/// <20><>ȡ - <20><><EFBFBD><EFBFBD> ORM <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>Orm<72>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ԡ<EFBFBD>
/// </summary>
[JsonIgnore]
public OrmBaseInfo BaseInfo
{
get
{
if (_BaseInfo == null)
{
_BaseInfo = new OrmBaseInfo(Action);
}
return _BaseInfo;
}
}
internal MDataColumn Columns = null;
private bool _IsWriteLogOnError = true;
/// <summary>
/// <20><>ʶ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>־(Ĭ<><C4AC>true)
/// </summary>
[JsonIgnore]
internal bool IsWriteLogOnError
{
set
{
_IsWriteLogOnError = value;
if (_Action != null && _Action.dalHelper != null)
{
_Action.dalHelper.IsWriteLogOnError = value;
}
}
}
/// <summary>
/// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AOP<4F><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>ֵͬ<D6B5><CDAC><><C4AC>false)
/// </summary>
internal bool IsUseAop = false;
//private static FieldSource _FieldSource = FieldSource.BothOfAll;
///// <summary>
///// <20>ֶ<EFBFBD><D6B6><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD>ֶα<D6B6><CEB1><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>£<EFBFBD>
///// </summary>
//public static FieldSource FieldSource
//{
// get
// {
// return _FieldSource;
// }
// set
// {
// _FieldSource = value;
// }
//}
Object entity;//ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Type typeInfo;//ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private MAction _Action;
[JsonIgnore]
internal MAction Action
{
get
{
//conn Ϊ null<6C><6C><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ȡֵ<C8A1><D6B5>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (_Action == null && _conn != "")
{
SetDelayInit(_entityInstance, _tableName, _conn);//<2F>ӳټ<D3B3><D9BC><EFBFBD>
if (_Action != null && _Action.dalHelper != null)
{
_Action.dalHelper.IsWriteLogOnError = _IsWriteLogOnError;
}
}
return _Action;
}
}
/// <summary>
/// Whether to allow manual insertion of ids for self-incrementing primary key identification
///<para><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD>ģ<EFBFBD><C4A3>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>id</para>
/// </summary>
[JsonIgnore]
public bool AllowInsertID
{
get
{
if (Action != null)
{
return Action.AllowInsertID;
}
return false;
}
set
{
if (Action != null)
{
Action.AllowInsertID = value;
}
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><ECBAAF>
/// </summary>
public SimpleOrmBase()
{
}
/// <summary>
/// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public SimpleOrmBase SetPara(object paraName, object value)
{
if (Action != null)
{
Action.SetPara(paraName, value);
}
return this;
}
/// <summary>
/// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public SimpleOrmBase SetPara(object paraName, object value, DbType dbType)
{
if (Action != null)
{
Action.SetPara(paraName, value, dbType);
}
return this;
}
/// <summary>
/// Sets a custom expression for the Update operation.
/// <para>ΪUpdate<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD></para>
/// </summary>
/// <param name="updateExpression">as<61><73>"a=a+1"<para><3E>磺"a=a+1"</para></param>
public SimpleOrmBase SetExpression(string updateExpression)
{
if (Action != null)
{
Action.SetExpression(updateExpression);
}
return this;
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>Aop״̬
/// </summary>
/// <param name="op"></param>
public SimpleOrmBase SetAopState(AopOp op)
{
if (Action != null)
{
Action.SetAopState(op);
}
return this;
}
/// <summary>
/// <20><>ʼ<EFBFBD><CABC>״̬[<5B>̳д˻<D0B4><CBBB><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><ECBAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô˷<C3B4><CBB7><EFBFBD>]
/// </summary>
/// <param name="entityInstance">ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,һ<><D2BB>д:this</param>
protected void SetInit(Object entityInstance)
{
SetInit(entityInstance, null, null, true);
}
/// <summary>
/// <20><>ʼ<EFBFBD><CABC>״̬[<5B>̳д˻<D0B4><CBBB><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><ECBAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô˷<C3B4><CBB7><EFBFBD>]
/// </summary>
/// <param name="entityInstance">ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,һ<><D2BB>д:this</param>
/// <param name="tableName"><3E><><EFBFBD><EFBFBD>,<2C><>:Users</param>
protected void SetInit(Object entityInstance, string tableName)
{
SetInit(entityInstance, tableName, null, true);
}
/// <summary>
/// <20><>ʼ<EFBFBD><CABC>״̬[<5B>̳д˻<D0B4><CBBB><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><ECBAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô˷<C3B4><CBB7><EFBFBD>]
/// </summary>
/// <param name="entityInstance">ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,һ<><D2BB>д:this</param>
/// <param name="tableName"><3E><><EFBFBD><EFBFBD>,<2C><>:Users</param>
/// <param name="conn"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>ʱ<EFBFBD><CAB1>дNull,<2C><>дĬ<D0B4><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:"Conn",<2C><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD></param>
protected void SetInit(Object entityInstance, string tableName, string conn)
{
SetInit(entityInstance, tableName, conn, true);
}
/// <summary>
/// <20><>ʼ<EFBFBD><CABC>״̬[<5B>̳д˻<D0B4><CBBB><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><ECBAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô˷<C3B4><CBB7><EFBFBD>]
/// </summary>
/// <param name="entityInstance">ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,һ<><D2BB>д:this</param>
/// <param name="tableName"><3E><><EFBFBD><EFBFBD>,<2C><>:Users</param>
/// <param name="conn"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>ʱ<EFBFBD><CAB1>дNull,<2C><>дĬ<D0B4><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:"Conn",<2C><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD></param>
/// <param name="isWriteLogOnError"><3E><>ִ<EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD>쳣ʱ<ECB3A3><CAB1><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־</param>
protected void SetInit(Object entityInstance, string tableName, string conn, bool isWriteLogOnError)
{
_entityInstance = entityInstance;
_tableName = tableName;
_conn = conn;
_IsWriteLogOnError = isWriteLogOnError;
}
private object _entityInstance;
private string _tableName = null;
private string _conn = null;
/// <summary>
/// <20><>ԭ<EFBFBD>еij<D0B5>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ء<EFBFBD>
/// </summary>
private void SetDelayInit(Object entityInstance, string tableName, string conn)
{
if (tableName == AppConfig.Log.TableName && string.IsNullOrEmpty(AppConfig.Log.Conn))
{
return;
}
//if (string.IsNullOrEmpty(conn))
//{
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>ʵ<EFBFBD><CAB5><EFBFBD>
// return;
//}
if (entityInstance == null) { entityInstance = this; }
entity = entityInstance;
typeInfo = entity.GetType();
try
{
if (string.IsNullOrEmpty(tableName) || string.IsNullOrEmpty(conn))
{
string tName, tConn;
tName = DBFast.GetTableName(typeInfo, out tConn);
if (string.IsNullOrEmpty(tableName)) { tableName = tName; }
if (string.IsNullOrEmpty(conn)) { conn = tConn; }
}
string errMsg = string.Empty;
Columns = DBTool.GetColumns(tableName, conn, out errMsg);//<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><ECB3A3>
if (Columns == null || Columns.Count == 0)
{
if (errMsg != string.Empty)
{
Error.Throw(errMsg);
}
Columns = TableSchema.GetColumnByType(typeInfo, conn);
ConnBean connBean = ConnBean.Create(conn);//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (connBean == null)
{
string err = "SimpleOrmBase<T>.SetDelayInit ConnBean can't create by " + conn;
Log.Write(err, LogType.DataBase);
Error.Throw(err);
}
if (!DBTool.Exists(tableName, "U", connBean.ConnStringOrg))
{
lock (tableName)
{
if (!DBTool.Exists(tableName, "U", connBean.ConnStringOrg))
{
DBTool.ErrorMsg = null;
if (!DBTool.CreateTable(tableName, Columns, connBean.ConnStringOrg))
{
string err = "SimpleOrmBase <20><>Create Table " + tableName + " Error:" + DBTool.ErrorMsg;
Log.Write(err, LogType.DataBase);
Error.Throw(err);
}
}
}
}
}
_Action = new MAction(Columns.ToRow(tableName), conn);
if (typeInfo.Name == "SysLogs")
{
_Action.SetAopState(Aop.AopOp.CloseAll);
}
}
catch (Exception err)
{
if (typeInfo.Name != "SysLogs")
{
Log.Write(err, LogType.DataBase);
}
Error.Throw(err.Message);
}
}
internal void SetInit2(Object entityInstance, string tableName, string conn, bool isWriteLogOnError)
{
SetInit(entityInstance, tableName, conn, isWriteLogOnError);
}
internal void Set(object key, object value)
{
if (Action != null)
{
Action.Set(key, value);
}
}
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD>IJ<EFBFBD> <EFBFBD><EFBFBD>Ա
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public bool Insert()
{
return Insert(false, InsertOp.ID, false);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="option"><3E><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1></param>
public bool Insert(InsertOp option)
{
return Insert(false, option, false);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="insertID"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
public bool Insert(InsertOp option, bool insertID)
{
return Insert(false, option, insertID);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="autoSetValue"><3E>Ƿ<EFBFBD><C7B7>Զ<EFBFBD><D4B6><EFBFBD>ȡֵ[<5B>Զ<EFBFBD><D4B6>ӿؼ<D3BF><D8BC><EFBFBD>ȡֵ,<2C><>Ҫ<EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>this.UI.SetAutoPrefix<69><78>this.UI.SetAutoParentControl<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿؼ<C3BF>ǰ׺]</param>
public bool Insert(bool autoSetValue)
{
return Insert(autoSetValue, InsertOp.ID, false);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="autoSetValue"><3E>Ƿ<EFBFBD><C7B7>Զ<EFBFBD><D4B6><EFBFBD>ȡֵ[<5B>Զ<EFBFBD><D4B6>ӿؼ<D3BF><D8BC><EFBFBD>ȡֵ,<2C><>Ҫ<EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>this.UI.SetAutoPrefix<69><78>this.UI.SetAutoParentControl<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿؼ<C3BF>ǰ׺]</param>
public bool Insert(bool autoSetValue, InsertOp option)
{
return Insert(autoSetValue, option, false);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="autoSetValue"><3E>Ƿ<EFBFBD><C7B7>Զ<EFBFBD><D4B6><EFBFBD>ȡֵ[<5B>Զ<EFBFBD><D4B6>ӿؼ<D3BF><D8BC><EFBFBD>ȡֵ,<2C><>Ҫ<EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>this.UI.SetAutoPrefix<69><78>this.UI.SetAutoParentControl<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿؼ<C3BF>ǰ׺]</param>
/// <param name="option"><3E><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1></param>
/// <param name="insertID"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
public bool Insert(bool autoSetValue, InsertOp option, bool insertID)
{
if (Action == null)
{
return false;
}
if (autoSetValue)
{
Action.UI.GetAll(!insertID);
}
GetValueFromEntity();
Action.AllowInsertID = insertID;
bool result = Action.Insert(false, option);
if (autoSetValue || option != InsertOp.None)
{
SetValueToEntity();
}
return result;
}
#endregion
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>0<><30>Ϊtrue)
/// </summary>
public bool Update()
{
return Update(null, false, null);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>0<><30>Ϊtrue)
/// </summary>
/// <param name="where">where<72><65><EFBFBD><EFBFBD>,<2C><>ֱ<EFBFBD>Ӵ<EFBFBD>id<69><64>ֵ<EFBFBD><D6B5>:[88],<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>where<72><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:[id=88 and name='·<><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>']</param>
/// <param name="updateColumns">ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>ŷָ<C5B7></param>
/// <returns></returns>
public bool Update(object where, params string[] updateColumns)
{
return Update(where, false, updateColumns);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>0<><30>Ϊtrue)
/// </summary>
/// <param name="where">where<72><65><EFBFBD><EFBFBD>,<2C><>ֱ<EFBFBD>Ӵ<EFBFBD>id<69><64>ֵ<EFBFBD><D6B5>:[88],<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>where<72><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:[id=88 and name='·<><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>']</param>
/// <param name="autoSetValue"><3E>Ƿ<EFBFBD><C7B7>Զ<EFBFBD><D4B6><EFBFBD>ȡֵ[<5B>Զ<EFBFBD><D4B6>ӿؼ<D3BF><D8BC><EFBFBD>ȡֵ,<2C><>Ҫ<EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>this.UI.SetAutoPrefix<69><78>this.UI.SetAutoParentControl<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿؼ<C3BF>ǰ׺]</param>
public bool Update(object where, bool autoSetValue, params string[] updateColumns)
{
if (Action == null)
{
return false;
}
if (autoSetValue)
{
Action.UI.GetAll(false);
}
GetValueFromEntity();
if (updateColumns != null && updateColumns.Length > 0)
{
Action.Data.SetState(0);
if (updateColumns.Length == 1)
{
updateColumns = updateColumns[0].Split(',');
}
foreach (string item in updateColumns)
{
MDataCell cell = Action.Data[item];
if (cell != null)
{
cell.State = 2;
}
}
}
bool result = Action.Update(where) && Action.RecordsAffected > 0;
if (autoSetValue)
{
SetValueToEntity();
}
return result;
}
#endregion
#region ɾ<EFBFBD><EFBFBD>
/// <summary>
/// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>0<><30>Ϊtrue)
/// </summary>
public bool Delete()
{
return Delete(null);
}
/// <summary>
/// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>0<><30>Ϊtrue)
/// </summary>
/// <param name="where">where<72><65><EFBFBD><EFBFBD>,<2C><>ֱ<EFBFBD>Ӵ<EFBFBD>id<69><64>ֵ<EFBFBD><D6B5>:[88],<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>where<72><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:[id=88 and name='·<><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>']</param>
public bool Delete(object where)
{
return Delete(where, false);
}
/// <summary>
/// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>0<><30>Ϊtrue)
/// </summary>
/// <param name="isIgnoreDeleteField"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>ֶΣ<D6B6><CEA3>磺IsDeleted<65><64>ʶʱ<CAB6><CAB1>Ĭ<EFBFBD>ϻ<EFBFBD>ת<EFBFBD>ɸ<EFBFBD><C9B8>£<EFBFBD><C2A3>˱<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊɾ<CEAA><C9BE></param>
/// <returns></returns>
public bool Delete(object where, bool isIgnoreDeleteField)
{
if (Action == null)
{
return false;
}
GetValueFromEntity();
return Action.Delete(where, isIgnoreDeleteField) && Action.RecordsAffected > 0;
}
#endregion
#region <EFBFBD><EFBFBD>ѯ
/// <summary>
/// <20><>ѯ1<D1AF><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public bool Fill()
{
return Fill(null);
}
/// <summary>
/// <20><>ѯ1<D1AF><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public bool Fill(object where)
{
if (Action == null)
{
return false;
}
bool result = Action.Fill(where);
if (result)
{
SetValueToEntity();
}
return result;
}
/// <summary>
/// <20><>ѯһ<D1AF><D2BB><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µ<EFBFBD>ʵ<EFBFBD><CAB5>
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public virtual T Get<T>(object where) where T : class
{
if (Action != null)
{
bool result = Action.Fill(where);
if (result)
{
return Action.Data.ToEntity<T>();
}
}
return default(T);
}
/// <summary>
/// <20>б<EFBFBD><D0B1><EFBFBD>ѯ
/// </summary>
public virtual List<T> Select<T>() where T : class
{
int count = 0;
return Select<T>(0, 0, null, out count);
}
/// <summary>
/// <20>б<EFBFBD><D0B1><EFBFBD>ѯ
/// </summary>
/// <param name="where"><3E><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>[<5B>ɸ<EFBFBD><C9B8><EFBFBD> order by <20><><EFBFBD><EFBFBD>]</param>
/// <returns></returns>
public virtual List<T> Select<T>(string where) where T : class
{
int count = 0;
return Select<T>(0, 0, where, out count);
}
/// <summary>
/// <20>б<EFBFBD><D0B1><EFBFBD>ѯ
/// </summary>
/// <param name="topN"><3E><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD></param>
/// <param name="where"><3E><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>[<5B>ɸ<EFBFBD><C9B8><EFBFBD> order by <20><><EFBFBD><EFBFBD>]</param>
/// <returns></returns>
public virtual List<T> Select<T>(int topN, string where) where T : class
{
int count = 0;
return Select<T>(0, topN, where, out count);
}
public virtual List<T> Select<T>(int pageIndex, int pageSize) where T : class
{
int count = 0;
return Select<T>(pageIndex, pageSize, null, out count);
}
public virtual List<T> Select<T>(int pageIndex, int pageSize, string where) where T : class
{
int count = 0;
return Select<T>(pageIndex, pageSize, where, out count);
}
/// <summary>
/// <20><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD>ܵ<EFBFBD>ѡ<EFBFBD><D1A1>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ,ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱֻ<CAB1><D6BB><EFBFBD><EFBFBD>PageIndex/PageSize<7A><65><EFBFBD><EFBFBD>Ϊ0]
/// </summary>
/// <param name="pageIndex"><3E>ڼ<EFBFBD>ҳ</param>
/// <param name="pageSize">ÿҳ<C3BF><D2B3><EFBFBD><EFBFBD>[Ϊ0ʱĬ<CAB1><C4AC>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]</param>
/// <param name="where"> <20><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>[<5B>ɸ<EFBFBD><C9B8><EFBFBD> order by <20><><EFBFBD><EFBFBD>]</param>
/// <param name="count"><3E><><EFBFBD>صļ<D8B5>¼<EFBFBD><C2BC><EFBFBD><EFBFBD></param>
/// <param name="selectColumns">ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD></param>
public virtual List<T> Select<T>(int pageIndex, int pageSize, string where, out int count) where T : class
{
if (Action == null)
{
count = 0;
return null;
}
return Action.SelectList<T>(pageIndex, pageSize, where, out count);
}
internal MDataTable Select(int pageIndex, int pageSize, string where, out int count)
{
if (Action == null)
{
count = 0;
return null;
}
return Action.Select(pageIndex, pageSize, where, out count);
}
public SimpleOrmBase SetSelectColumns(params object[] columnNames)
{
if (Action != null)
{
Action.SetSelectColumns(columnNames);
}
return this;
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
/// </summary>
public int GetCount()
{
if (Action == null)
{
return 0;
}
return Action.GetCount();
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
/// </summary>
public int GetCount(object where)
{
if (Action == null)
{
return 0;
}
return Action.GetCount(where);
}
/// <summary>
/// <20><>ѯ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public bool Exists(object where)
{
if (Action == null)
{
return false;
}
return Action.Exists(where);
}
#endregion
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ɴ<EFBFBD>Json<6F><6E>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MDataRow<6F><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶε<D6B6><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
/// </summary>
/// <param name="jsonOrEntity">json<6F>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
public void LoadFrom(object jsonOrEntity)
{
LoadFrom(jsonOrEntity, BreakOp.None);
}
public void LoadFrom(object jsonOrEntity, BreakOp op)
{
MDataRow newValueRow = MDataRow.CreateFrom(jsonOrEntity, null, op);
if (Action != null)
{
Action.Data.LoadFrom(newValueRow);
}
List<PropertyInfo> piList = ReflectTool.GetPropertyList(typeInfo);
foreach (PropertyInfo item in piList)
{
if (item.CanWrite)
{
MDataCell cell = newValueRow[item.Name];
if (cell != null && !cell.IsNull)
{
try
{
item.SetValue(entity, ConvertTool.ChangeType(cell.Value, item.PropertyType), null);
}
catch (Exception err)
{
Log.Write(err, LogType.Error);
}
}
}
}
}
#endregion
internal void SetValueToEntity()
{
SetValueToEntity(null, RowOp.IgnoreNull);
}
internal void SetValueToEntity(RowOp op)
{
SetValueToEntity(null, op);
}
internal void SetValueToEntity(string propName, RowOp op)
{
if (!string.IsNullOrEmpty(propName))
{
PropertyInfo pi = typeInfo.GetProperty(propName);
if (pi != null && pi.CanWrite)
{
MDataCell cell = Action.Data[propName];
if (cell != null && !cell.IsNull)
{
try
{
pi.SetValue(entity, cell.Value, null);
}
catch
{
}
}
}
}
else
{
if (Action != null)
{
Action.Data.SetToEntity(entity, op);
}
}
}
private void GetValueFromEntity()
{
if (!IsUseAop || AppConfig.IsNetCore)//ASPNETCore<72>£<EFBFBD><C2A3><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Aop<6F><70><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
{
MDataRow d = Action.Data;//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>صġ<D8B5>
MDataRow row = MDataRow.CreateFrom(entity);//<2F><>ʵ<EFBFBD><CAB5>ԭ<EFBFBD><D4AD>ֵΪ<D6B5><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
foreach (MDataCell cell in d)
{
MDataCell valueCell = row[cell.ColumnName];
if (valueCell == null || valueCell.IsNull)
{
continue;
}
if (cell.State == 2 && cell.Struct.ValueType.IsValueType && (valueCell.StringValue == "0" || valueCell.StringValue == DateTime.MinValue.ToString()))
{
continue;
}
cell.Value = valueCell.Value;
}
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>(SetPara<72><61><EFBFBD>õ<EFBFBD>)<29>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public void ClearPara()
{
if (_Action != null)
{
_Action.ClearPara();
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
/// </summary>
public void Clear()
{
if (_Action != null)
{
_Action.Data.Clear();
}
}
/// <summary>
/// UI<55><49><EFBFBD><EFBFBD>
/// </summary>
[JsonIgnore]
public MActionUI UI
{
get
{
if (Action == null) { return null; }
if (Action.UI.IsOnAfterGetFromEventNull)
{
Action.UI.OnAfterGetFromEvent += new CYQ.Data.UI.MActionUI.OnAfterGetFrom(UI_OnAfterGetFromEvent);
}
return Action.UI;
}
}
void UI_OnAfterGetFromEvent(string propValue)
{
if (!string.IsNullOrEmpty(propValue))
{
SetValueToEntity(propValue, RowOp.IgnoreNull);
}
}
#region IDisposable <EFBFBD><EFBFBD>Ա
/// <summary>
/// <20>ͷ<EFBFBD><CDB7><EFBFBD>Դ
/// </summary>
public void Dispose()
{
if (_Action != null && !_Action.IsTransation)//ORM<52><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ֿ<EFBFBD><D6BF>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ӡ<EFBFBD>
{
_Action.Dispose();
_Action = null;
}
}
#endregion
}
}