mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-06-28 13:34:32 +08:00
Update Core MySql
This commit is contained in:
parent
b552079459
commit
e732b58895
@ -2,7 +2,7 @@
|
||||
<package >
|
||||
<metadata>
|
||||
<id>sqlSugar</id>
|
||||
<version>4.0.6</version>
|
||||
<version>4.1</version>
|
||||
<title>SqlSugar SqlServer ORM</title>
|
||||
<authors>sun kaixuan</authors>
|
||||
<owners>landa</owners>
|
||||
|
@ -14,6 +14,8 @@ Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "SqlServerTest", "src\SqlSer
|
||||
EndProject
|
||||
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "SqlSugar", "src\SqlSugar\SqlSugar.xproj", "{1C022A5C-4E4D-4026-A8A3-F659B9740A1A}"
|
||||
EndProject
|
||||
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MySqlTest", "src\MySqlTest\MySqlTest.xproj", "{B20C63AD-3E90-4287-BF69-4417F377DFDC}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@ -28,6 +30,10 @@ Global
|
||||
{1C022A5C-4E4D-4026-A8A3-F659B9740A1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1C022A5C-4E4D-4026-A8A3-F659B9740A1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1C022A5C-4E4D-4026-A8A3-F659B9740A1A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B20C63AD-3E90-4287-BF69-4417F377DFDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B20C63AD-3E90-4287-BF69-4417F377DFDC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B20C63AD-3E90-4287-BF69-4417F377DFDC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B20C63AD-3E90-4287-BF69-4417F377DFDC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@ -35,5 +41,6 @@ Global
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{298028E0-EB86-4C7E-9B23-69DE5997F405} = {0C3ED2E9-ECF1-4562-8F9E-8F1FEC308647}
|
||||
{1C022A5C-4E4D-4026-A8A3-F659B9740A1A} = {0C3ED2E9-ECF1-4562-8F9E-8F1FEC308647}
|
||||
{B20C63AD-3E90-4287-BF69-4417F377DFDC} = {0C3ED2E9-ECF1-4562-8F9E-8F1FEC308647}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
21
Src/Asp.NetCore/SqlServerTest/src/MySqlTest/MySqlTest.xproj
Normal file
21
Src/Asp.NetCore/SqlServerTest/src/MySqlTest/MySqlTest.xproj
Normal file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
|
||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>b20c63ad-3e90-4287-bf69-4417f377dfdc</ProjectGuid>
|
||||
<RootNamespace>MySqlTest</RootNamespace>
|
||||
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
|
||||
<OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
|
||||
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
|
||||
</Project>
|
14
Src/Asp.NetCore/SqlServerTest/src/MySqlTest/Program.cs
Normal file
14
Src/Asp.NetCore/SqlServerTest/src/MySqlTest/Program.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MySqlTest
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("MySqlTest")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("b20c63ad-3e90-4287-bf69-4417f377dfdc")]
|
19
Src/Asp.NetCore/SqlServerTest/src/MySqlTest/project.json
Normal file
19
Src/Asp.NetCore/SqlServerTest/src/MySqlTest/project.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"version": "1.0.0-*",
|
||||
"buildOptions": {
|
||||
"emitEntryPoint": true
|
||||
},
|
||||
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.App": {
|
||||
"type": "platform",
|
||||
"version": "1.0.1"
|
||||
}
|
||||
},
|
||||
|
||||
"frameworks": {
|
||||
"netcoreapp1.0": {
|
||||
"imports": "dnxcore50"
|
||||
}
|
||||
}
|
||||
}
|
@ -2,7 +2,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Runtime.Loader;
|
||||
using System.Text;
|
||||
namespace SqlSugar
|
||||
{
|
||||
@ -15,13 +14,13 @@ namespace SqlSugar
|
||||
#endregion
|
||||
|
||||
#region Public methods
|
||||
public ICodeFirst BackupTable(int maxBackupDataRows = int.MaxValue)
|
||||
public virtual ICodeFirst BackupTable(int maxBackupDataRows = int.MaxValue)
|
||||
{
|
||||
this.IsBackupTable = true;
|
||||
this.MaxBackupDataRows = maxBackupDataRows;
|
||||
return this;
|
||||
}
|
||||
public void InitTables(Type entityType)
|
||||
public virtual void InitTables(Type entityType)
|
||||
{
|
||||
if (!this.Context.DbMaintenance.IsAnySystemTablePermissions())
|
||||
{
|
||||
@ -34,7 +33,7 @@ namespace SqlSugar
|
||||
});
|
||||
Check.Exception(!executeResult.IsSuccess, executeResult.Messaage);
|
||||
}
|
||||
public void InitTables(Type[] entityTypes)
|
||||
public virtual void InitTables(Type[] entityTypes)
|
||||
{
|
||||
if (entityTypes.IsValuable())
|
||||
{
|
||||
@ -44,12 +43,12 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
}
|
||||
public void InitTables(string entitiesNamespace)
|
||||
public virtual void InitTables(string entitiesNamespace)
|
||||
{
|
||||
var types = AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(entitiesNamespace)).GetTypes();
|
||||
var types =ReflectionExtensions.LoadAssembly(entitiesNamespace).GetTypes();
|
||||
InitTables(types);
|
||||
}
|
||||
public void InitTables(params string[] entitiesNamespaces)
|
||||
public virtual void InitTables(params string[] entitiesNamespaces)
|
||||
{
|
||||
if (entitiesNamespaces.IsValuable())
|
||||
{
|
||||
@ -62,7 +61,7 @@ namespace SqlSugar
|
||||
#endregion
|
||||
|
||||
#region Core Logic
|
||||
private void Execute(Type entityType)
|
||||
protected virtual void Execute(Type entityType)
|
||||
{
|
||||
var entityInfo = this.Context.EntityProvider.GetEntityInfo(entityType);
|
||||
var tableName = GetTableName(entityInfo);
|
||||
@ -72,27 +71,27 @@ namespace SqlSugar
|
||||
else
|
||||
NoExistLogic(entityInfo);
|
||||
}
|
||||
private void NoExistLogic(EntityInfo entityInfo)
|
||||
public virtual void NoExistLogic(EntityInfo entityInfo)
|
||||
{
|
||||
var tableName = GetTableName(entityInfo);
|
||||
Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1");
|
||||
List<DbColumnInfo> columns = new List<DbColumnInfo>();
|
||||
if (entityInfo.Columns.IsValuable())
|
||||
{
|
||||
foreach (var item in entityInfo.Columns)
|
||||
foreach (var item in entityInfo.Columns.Where(it => it.IsIgnore == false))
|
||||
{
|
||||
DbColumnInfo dbColumnInfo = EntityColumnToDbColumn(entityInfo, tableName, item);
|
||||
columns.Add(dbColumnInfo);
|
||||
}
|
||||
}
|
||||
this.Context.DbMaintenance.CreateTable(tableName, columns);
|
||||
var pkColumns= entityInfo.Columns.Where(it => it.IsPrimarykey).ToList();
|
||||
var pkColumns = entityInfo.Columns.Where(it => it.IsPrimarykey).ToList();
|
||||
foreach (var item in pkColumns)
|
||||
{
|
||||
this.Context.DbMaintenance.AddPrimaryKey(tableName, item.DbColumnName);
|
||||
}
|
||||
}
|
||||
private void ExistLogic(EntityInfo entityInfo)
|
||||
public virtual void ExistLogic(EntityInfo entityInfo)
|
||||
{
|
||||
if (entityInfo.Columns.IsValuable())
|
||||
{
|
||||
@ -100,6 +99,7 @@ namespace SqlSugar
|
||||
|
||||
var tableName = GetTableName(entityInfo);
|
||||
var dbColumns = this.Context.DbMaintenance.GetColumnInfosByTableName(tableName);
|
||||
ConvertColumns(dbColumns);
|
||||
var entityColumns = entityInfo.Columns.Where(it => it.IsIgnore == false).ToList();
|
||||
var dropColumns = dbColumns
|
||||
.Where(dc => !entityColumns.Any(ec => dc.DbColumnName.Equals(ec.OldDbColumnName, StringComparison.CurrentCultureIgnoreCase)))
|
||||
@ -112,7 +112,7 @@ namespace SqlSugar
|
||||
.Where(ec => !dbColumns.Any(dc => dc.DbColumnName.Equals(ec.OldDbColumnName, StringComparison.CurrentCultureIgnoreCase)))
|
||||
.Where(ec =>
|
||||
dbColumns.Any(dc => dc.DbColumnName.Equals(ec.DbColumnName)
|
||||
&& ((ec.Length != dc.Length && PubMethod.GetUnderType(ec.PropertyInfo).IsIn(PubConst.StringType)) ||
|
||||
&& ((ec.Length != dc.Length &&!PubMethod.GetUnderType(ec.PropertyInfo).IsEnum()&& PubMethod.GetUnderType(ec.PropertyInfo).IsIn(PubConst.StringType)) ||
|
||||
ec.IsNullable != dc.IsNullable ||
|
||||
IsSamgeType(ec, dc)))).ToList();
|
||||
var renameColumns = entityColumns
|
||||
@ -163,13 +163,7 @@ namespace SqlSugar
|
||||
}
|
||||
else if (pkDiff || idEntityDiff)
|
||||
{
|
||||
string constraintName = string.Format("PK_{0}_{1}", tableName, item.DbColumnName);
|
||||
if (this.Context.DbMaintenance.IsAnyConstraint(constraintName))
|
||||
this.Context.DbMaintenance.DropConstraint(tableName, constraintName);
|
||||
this.Context.DbMaintenance.DropColumn(tableName, item.DbColumnName);
|
||||
this.Context.DbMaintenance.AddColumn(tableName, EntityColumnToDbColumn(entityInfo, tableName, item));
|
||||
if (item.IsPrimarykey)
|
||||
this.Context.DbMaintenance.AddPrimaryKey(tableName, item.DbColumnName);
|
||||
ChangeKey(entityInfo, tableName, item);
|
||||
}
|
||||
}
|
||||
if (isChange && IsBackupTable)
|
||||
@ -178,30 +172,46 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void ChangeKey(EntityInfo entityInfo, string tableName, EntityColumnInfo item)
|
||||
{
|
||||
string constraintName = string.Format("PK_{0}_{1}", tableName, item.DbColumnName);
|
||||
if (this.Context.DbMaintenance.IsAnyConstraint(constraintName))
|
||||
this.Context.DbMaintenance.DropConstraint(tableName, constraintName);
|
||||
this.Context.DbMaintenance.DropColumn(tableName, item.DbColumnName);
|
||||
this.Context.DbMaintenance.AddColumn(tableName, EntityColumnToDbColumn(entityInfo, tableName, item));
|
||||
if (item.IsPrimarykey)
|
||||
this.Context.DbMaintenance.AddPrimaryKey(tableName, item.DbColumnName);
|
||||
}
|
||||
|
||||
protected virtual void ConvertColumns(List<DbColumnInfo> dbColumns)
|
||||
{
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Helper methods
|
||||
public string GetCreateTableString(EntityInfo entityInfo)
|
||||
public virtual string GetCreateTableString(EntityInfo entityInfo)
|
||||
{
|
||||
StringBuilder result = new StringBuilder();
|
||||
var tableName = GetTableName(entityInfo);
|
||||
return result.ToString();
|
||||
}
|
||||
public string GetCreateColumnsString(EntityInfo entityInfo)
|
||||
public virtual string GetCreateColumnsString(EntityInfo entityInfo)
|
||||
{
|
||||
StringBuilder result = new StringBuilder();
|
||||
var tableName = GetTableName(entityInfo);
|
||||
return result.ToString();
|
||||
}
|
||||
private static string GetTableName(EntityInfo entityInfo)
|
||||
protected virtual string GetTableName(EntityInfo entityInfo)
|
||||
{
|
||||
return entityInfo.DbTableName == null ? entityInfo.EntityName : entityInfo.DbTableName;
|
||||
}
|
||||
private DbColumnInfo EntityColumnToDbColumn(EntityInfo entityInfo, string tableName, EntityColumnInfo item)
|
||||
protected virtual DbColumnInfo EntityColumnToDbColumn(EntityInfo entityInfo, string tableName, EntityColumnInfo item)
|
||||
{
|
||||
var propertyType = PubMethod.GetUnderType(item.PropertyInfo);
|
||||
var result = new DbColumnInfo()
|
||||
{
|
||||
DataType = this.Context.Ado.DbBind.GetDbTypeName(PubMethod.GetUnderType(item.PropertyInfo).Name),
|
||||
TableId = entityInfo.Columns.IndexOf(item),
|
||||
DbColumnName = item.DbColumnName.IsValuable() ? item.DbColumnName : item.PropertyName,
|
||||
IsPrimarykey = item.IsPrimarykey,
|
||||
@ -212,14 +222,31 @@ namespace SqlSugar
|
||||
ColumnDescription = item.ColumnDescription,
|
||||
Length = item.Length
|
||||
};
|
||||
if (propertyType.IsEnum())
|
||||
{
|
||||
result.DataType = this.Context.Ado.DbBind.GetDbTypeName(item.Length>9?PubConst.LongType.Name:PubConst.IntType.Name);
|
||||
}
|
||||
else
|
||||
{
|
||||
result.DataType = this.Context.Ado.DbBind.GetDbTypeName(propertyType.Name);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private bool IsSamgeType(EntityColumnInfo ec, DbColumnInfo dc)
|
||||
protected virtual bool IsSamgeType(EntityColumnInfo ec, DbColumnInfo dc)
|
||||
{
|
||||
var propType = this.Context.Ado.DbBind.GetDbTypeName(PubMethod.GetUnderType(ec.PropertyInfo).Name);
|
||||
var propertyType = PubMethod.GetUnderType(ec.PropertyInfo);
|
||||
var properyTypeName = string.Empty;
|
||||
if (propertyType.IsEnum())
|
||||
{
|
||||
properyTypeName = this.Context.Ado.DbBind.GetDbTypeName(ec.Length > 9 ? PubConst.LongType.Name : PubConst.IntType.Name);
|
||||
}
|
||||
else
|
||||
{
|
||||
properyTypeName = this.Context.Ado.DbBind.GetDbTypeName(propertyType.Name);
|
||||
}
|
||||
var dataType = dc.DataType;
|
||||
return propType != dataType;
|
||||
return properyTypeName != dataType;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ namespace SqlSugar
|
||||
#endregion
|
||||
|
||||
#region Public methods
|
||||
public string GetDbTypeName(string csharpTypeName)
|
||||
public virtual string GetDbTypeName(string csharpTypeName)
|
||||
{
|
||||
if (csharpTypeName == PubConst.ByteArrayType.Name)
|
||||
{
|
||||
|
@ -36,6 +36,8 @@ namespace SqlSugar
|
||||
private static readonly MethodInfo getInt32 = typeof(IDataRecord).GetMethod("GetInt32", new Type[] { typeof(int) });
|
||||
private static readonly MethodInfo getInt64 = typeof(IDataRecord).GetMethod("GetInt64", new Type[] { typeof(int) });
|
||||
private static readonly MethodInfo getString = typeof(IDataRecord).GetMethod("GetString", new Type[] { typeof(int) });
|
||||
private static readonly MethodInfo getStringGuid = typeof(IDataRecordExtensions).GetMethod("GetStringGuid");
|
||||
private static readonly MethodInfo getConvertStringGuid = typeof(IDataRecordExtensions).GetMethod("GetConvertStringGuid");
|
||||
private static readonly MethodInfo getEnum = typeof(IDataRecordExtensions).GetMethod("GetEnum");
|
||||
private static readonly MethodInfo getConvertString = typeof(IDataRecordExtensions).GetMethod("GetConvertString");
|
||||
private static readonly MethodInfo getConvertFloat = typeof(IDataRecordExtensions).GetMethod("GetConvertFloat");
|
||||
@ -178,6 +180,9 @@ namespace SqlSugar
|
||||
case CSharpDataType.@string:
|
||||
CheckType(bind.StringThrow, bindProperyTypeName, validPropertyName, propertyName);
|
||||
method = getString;
|
||||
if (bindProperyTypeName == "guid") {
|
||||
method = getConvertStringGuid ;
|
||||
}
|
||||
break;
|
||||
case CSharpDataType.DateTime:
|
||||
CheckType(bind.DateThrow, bindProperyTypeName, validPropertyName, propertyName);
|
||||
@ -198,7 +203,7 @@ namespace SqlSugar
|
||||
case CSharpDataType.Guid:
|
||||
CheckType(bind.GuidThrow, bindProperyTypeName, validPropertyName, propertyName);
|
||||
if (bindProperyTypeName == "guid")
|
||||
method = isNullableType ? getConvertGuid : getGuid;
|
||||
method = isNullableType ? getConvertStringGuid : getStringGuid;
|
||||
break;
|
||||
case CSharpDataType.@byte:
|
||||
method = isNullableType ? getConvertByte : getByte;
|
||||
@ -208,11 +213,12 @@ namespace SqlSugar
|
||||
break;
|
||||
case CSharpDataType.@short:
|
||||
CheckType(bind.ShortThrow, bindProperyTypeName, validPropertyName, propertyName);
|
||||
if (bindProperyTypeName == "int16" && bindProperyTypeName == "short")
|
||||
if (bindProperyTypeName == "int16" || bindProperyTypeName == "short")
|
||||
method = isNullableType ? getConvertInt16 : getInt16;
|
||||
break;
|
||||
case CSharpDataType.@long:
|
||||
method = isNullableType ? getConvetInt64 : getInt64;
|
||||
if (bindProperyTypeName == "int64" || bindProperyTypeName == "long")
|
||||
method = isNullableType ? getConvetInt64 : getInt64;
|
||||
break;
|
||||
default:
|
||||
method = getValueMethod;
|
||||
|
@ -7,6 +7,23 @@ namespace SqlSugar
|
||||
{
|
||||
public static partial class IDataRecordExtensions
|
||||
{
|
||||
|
||||
public static Guid GetStringGuid(this IDataRecord dr, int i)
|
||||
{
|
||||
var reval =Guid.Parse(dr.GetValue(i).ToString());
|
||||
return reval;
|
||||
}
|
||||
|
||||
public static Guid? GetConvertStringGuid(this IDataRecord dr, int i)
|
||||
{
|
||||
if (dr.IsDBNull(i))
|
||||
{
|
||||
return Guid.Empty;
|
||||
}
|
||||
var reval = Guid.Parse(dr.GetValue(i).ToString());
|
||||
return reval;
|
||||
}
|
||||
|
||||
public static bool? GetConvertBoolean(this IDataRecord dr, int i)
|
||||
{
|
||||
if (dr.IsDBNull(i))
|
||||
@ -57,7 +74,7 @@ namespace SqlSugar
|
||||
return reval;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static double? GetConvertDouble(this IDataRecord dr, int i)
|
||||
{
|
||||
if (dr.IsDBNull(i))
|
||||
@ -124,7 +141,7 @@ namespace SqlSugar
|
||||
{
|
||||
return null;
|
||||
}
|
||||
var reval =Convert.ToString(dr.GetValue(i));
|
||||
var reval = Convert.ToString(dr.GetValue(i));
|
||||
return reval;
|
||||
}
|
||||
|
||||
@ -138,7 +155,7 @@ namespace SqlSugar
|
||||
|
||||
}
|
||||
|
||||
public static T GetOther<T>(this IDataReader dr, int i)
|
||||
public static T GetOther<T>(this IDataReader dr, int i)
|
||||
{
|
||||
return (T)Convert.ChangeType(dr.GetValue(i), typeof(T));
|
||||
}
|
||||
@ -161,7 +178,7 @@ namespace SqlSugar
|
||||
return t;
|
||||
}
|
||||
|
||||
public static object GetEntity(this IDataReader dr, SqlSugarClient context)
|
||||
public static object GetEntity(this IDataReader dr, SqlSugarClient context)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
@ -31,12 +31,12 @@ namespace SqlSugar
|
||||
public virtual List<DbColumnInfo> GetColumnInfosByTableName(string tableName)
|
||||
{
|
||||
if (string.IsNullOrEmpty(tableName)) return new List<DbColumnInfo>();
|
||||
string key = "DbMaintenanceProvider.GetColumnInfosByTableName." + tableName.ToLower();
|
||||
string key = "DbMaintenanceProvider.GetColumnInfosByTableName." +this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower();
|
||||
return GetListOrCache<DbColumnInfo>(key, string.Format(this.GetColumnInfosByTableNameSql, tableName));
|
||||
}
|
||||
public virtual List<string> GetIsIdentities(string tableName)
|
||||
{
|
||||
string cacheKey = "DbMaintenanceProvider.GetIsIdentities" + tableName.ToLower();
|
||||
string cacheKey = "DbMaintenanceProvider.GetIsIdentities" +this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower();
|
||||
return this.Context.RewritableMethods.GetCacheInstance<List<string>>().Func(cacheKey,
|
||||
(cm, key) =>
|
||||
{
|
||||
@ -50,7 +50,7 @@ namespace SqlSugar
|
||||
}
|
||||
public virtual List<string> GetPrimaries(string tableName)
|
||||
{
|
||||
string cacheKey = "DbMaintenanceProvider.GetPrimaries" + tableName.ToLower();
|
||||
string cacheKey = "DbMaintenanceProvider.GetPrimaries" +this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower();
|
||||
return this.Context.RewritableMethods.GetCacheInstance<List<string>>().Func(cacheKey,
|
||||
(cm, key) =>
|
||||
{
|
||||
@ -67,12 +67,15 @@ namespace SqlSugar
|
||||
#region Check
|
||||
public virtual bool IsAnyTable(string tableName)
|
||||
{
|
||||
tableName = this.SqlBuilder.GetNoTranslationColumnName(tableName);
|
||||
var tables = GetTableInfoList();
|
||||
if (tables == null) return false;
|
||||
else return tables.Any(it => it.Name.Equals(tableName, StringComparison.CurrentCultureIgnoreCase));
|
||||
}
|
||||
public virtual bool IsAnyColumn(string tableName, string columnName)
|
||||
{
|
||||
columnName = this.SqlBuilder.GetTranslationColumnName(columnName);
|
||||
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
|
||||
var isAny = IsAnyTable(tableName);
|
||||
Check.Exception(!isAny, string.Format("Table {0} does not exist", tableName));
|
||||
var columns = GetColumnInfosByTableName(tableName);
|
||||
@ -81,6 +84,7 @@ namespace SqlSugar
|
||||
}
|
||||
public virtual bool IsPrimaryKey(string tableName, string columnName)
|
||||
{
|
||||
columnName = this.SqlBuilder.GetTranslationColumnName(columnName);
|
||||
var isAny = IsAnyTable(tableName);
|
||||
Check.Exception(!isAny, string.Format("Table {0} does not exist", tableName));
|
||||
var columns = GetColumnInfosByTableName(tableName);
|
||||
@ -89,6 +93,7 @@ namespace SqlSugar
|
||||
}
|
||||
public virtual bool IsIdentity(string tableName, string columnName)
|
||||
{
|
||||
columnName = this.SqlBuilder.GetTranslationColumnName(columnName);
|
||||
var isAny = IsAnyTable(tableName);
|
||||
Check.Exception(!isAny, string.Format("Table {0} does not exist", tableName));
|
||||
var columns = GetColumnInfosByTableName(tableName);
|
||||
@ -117,46 +122,56 @@ namespace SqlSugar
|
||||
#region DDL
|
||||
public virtual bool AddPrimaryKey(string tableName, string columnName)
|
||||
{
|
||||
string sql = string.Format(this.AddPrimaryKeySql, tableName, string.Format("PK_{0}_{1}", tableName, columnName), columnName);
|
||||
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
|
||||
columnName=this.SqlBuilder.GetTranslationTableName(columnName);
|
||||
string sql = string.Format(this.AddPrimaryKeySql,tableName, string.Format("PK_{0}_{1}",this.SqlBuilder.GetNoTranslationColumnName(tableName), this.SqlBuilder.GetNoTranslationColumnName(columnName)), columnName);
|
||||
this.Context.Ado.ExecuteCommand(sql);
|
||||
return true;
|
||||
}
|
||||
public virtual bool AddColumn(string tableName, DbColumnInfo columnInfo)
|
||||
{
|
||||
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
|
||||
string sql = GetAddColumnSql(tableName, columnInfo);
|
||||
this.Context.Ado.ExecuteCommand(sql);
|
||||
return true;
|
||||
}
|
||||
public virtual bool UpdateColumn(string tableName, DbColumnInfo column)
|
||||
{
|
||||
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
|
||||
string sql = GetUpdateColumnSql(tableName, column);
|
||||
this.Context.Ado.ExecuteCommand(sql);
|
||||
return true;
|
||||
}
|
||||
public virtual bool CreateTable(string tableName, List<DbColumnInfo> columns)
|
||||
{
|
||||
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
|
||||
string sql = GetCreateTableSql(tableName, columns);
|
||||
this.Context.Ado.ExecuteCommand(sql);
|
||||
return true;
|
||||
}
|
||||
public virtual bool DropTable(string tableName)
|
||||
{
|
||||
this.Context.Ado.ExecuteCommand(string.Format(this.DropTableSql, tableName));
|
||||
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
|
||||
this.Context.Ado.ExecuteCommand(string.Format(this.DropTableSql,tableName));
|
||||
return true;
|
||||
}
|
||||
public virtual bool DropColumn(string tableName, string columnName)
|
||||
{
|
||||
columnName = this.SqlBuilder.GetTranslationColumnName(columnName);
|
||||
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
|
||||
this.Context.Ado.ExecuteCommand(string.Format(this.DropColumnToTableSql, tableName, columnName));
|
||||
return true;
|
||||
}
|
||||
public virtual bool DropConstraint(string tableName, string constraintName)
|
||||
{
|
||||
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
|
||||
string sql = string.Format(this.DropConstraintSql, tableName, constraintName);
|
||||
this.Context.Ado.ExecuteCommand(sql);
|
||||
return true;
|
||||
}
|
||||
public virtual bool TruncateTable(string tableName)
|
||||
{
|
||||
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
|
||||
this.Context.Ado.ExecuteCommand(string.Format(this.TruncateTableSql, tableName));
|
||||
return true;
|
||||
}
|
||||
@ -172,12 +187,17 @@ namespace SqlSugar
|
||||
}
|
||||
public virtual bool BackupTable(string oldTableName, string newTableName, int maxBackupDataRows = int.MaxValue)
|
||||
{
|
||||
string sql = string.Format(this.BackupTableSql, maxBackupDataRows, newTableName, oldTableName);
|
||||
oldTableName = this.SqlBuilder.GetTranslationTableName(oldTableName);
|
||||
newTableName = this.SqlBuilder.GetTranslationTableName(newTableName);
|
||||
string sql = string.Format(this.BackupTableSql, maxBackupDataRows,newTableName , oldTableName);
|
||||
this.Context.Ado.ExecuteCommand(sql);
|
||||
return true;
|
||||
}
|
||||
public virtual bool RenameColumn(string tableName, string oldColumnName, string newColumnName)
|
||||
{
|
||||
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
|
||||
oldColumnName = this.SqlBuilder.GetTranslationColumnName(oldColumnName);
|
||||
newColumnName = this.SqlBuilder.GetTranslationColumnName(newColumnName);
|
||||
string sql = string.Format(this.RenameColumnSql, tableName, oldColumnName, newColumnName);
|
||||
this.Context.Ado.ExecuteCommand(sql);
|
||||
return true;
|
||||
@ -201,27 +221,28 @@ namespace SqlSugar
|
||||
return reval;
|
||||
});
|
||||
}
|
||||
private string GetCreateTableSql(string tableName, List<DbColumnInfo> columns)
|
||||
protected virtual string GetCreateTableSql(string tableName, List<DbColumnInfo> columns)
|
||||
{
|
||||
List<string> columnArray = new List<string>();
|
||||
Check.Exception(columns.IsNullOrEmpty(), "No columns found ");
|
||||
foreach (var item in columns)
|
||||
{
|
||||
string columnName = item.DbColumnName;
|
||||
string columnName =this.SqlBuilder.GetTranslationTableName(item.DbColumnName);
|
||||
string dataType = item.DataType;
|
||||
string dataSize = item.Length > 0 ? string.Format("({0})", item.Length) : null;
|
||||
string nullType = item.IsNullable ? this.CreateTableNull : CreateTableNotNull;
|
||||
string primaryKey = null;
|
||||
string identity = item.IsIdentity ? this.CreateTableIdentity : null;
|
||||
string addItem = string.Format(this.CreateTableColumn, columnName, dataType, dataSize, nullType, primaryKey, identity);
|
||||
string addItem = string.Format(this.CreateTableColumn,columnName, dataType, dataSize, nullType, primaryKey, identity);
|
||||
columnArray.Add(addItem);
|
||||
}
|
||||
string tableString = string.Format(this.CreateTableSql, tableName, string.Join(",\r\n", columnArray));
|
||||
string tableString = string.Format(this.CreateTableSql,this.SqlBuilder.GetTranslationTableName(tableName), string.Join(",\r\n", columnArray));
|
||||
return tableString;
|
||||
}
|
||||
private string GetAddColumnSql(string tableName, DbColumnInfo columnInfo)
|
||||
protected virtual string GetAddColumnSql(string tableName, DbColumnInfo columnInfo)
|
||||
{
|
||||
string columnName = columnInfo.DbColumnName;
|
||||
string columnName=this.SqlBuilder.GetTranslationColumnName(columnInfo.DbColumnName);
|
||||
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
|
||||
string dataType = columnInfo.DataType;
|
||||
string dataSize = columnInfo.Length > 0 ? string.Format("({0})", columnInfo.Length) : null;
|
||||
string nullType = columnInfo.IsNullable ? this.CreateTableNull : CreateTableNotNull;
|
||||
@ -230,9 +251,10 @@ namespace SqlSugar
|
||||
string result = string.Format(this.AddColumnToTableSql, tableName, columnName, dataType, dataSize, nullType, primaryKey, identity);
|
||||
return result;
|
||||
}
|
||||
private string GetUpdateColumnSql(string tableName, DbColumnInfo columnInfo)
|
||||
protected virtual string GetUpdateColumnSql(string tableName, DbColumnInfo columnInfo)
|
||||
{
|
||||
string columnName = columnInfo.DbColumnName;
|
||||
string columnName =this.SqlBuilder.GetTranslationTableName(columnInfo.DbColumnName);
|
||||
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
|
||||
string dataType = columnInfo.DataType;
|
||||
string dataSize = columnInfo.Length > 0 ? string.Format("({0})", columnInfo.Length) : null;
|
||||
string nullType = columnInfo.IsNullable ? this.CreateTableNull : CreateTableNotNull;
|
||||
|
@ -8,7 +8,20 @@ namespace SqlSugar
|
||||
public abstract partial class DbMaintenanceProvider : IDbMaintenance
|
||||
{
|
||||
#region Context
|
||||
private ISqlBuilder _SqlBuilder;
|
||||
public SqlSugarClient Context { get; set; }
|
||||
public ISqlBuilder SqlBuilder
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_SqlBuilder == null)
|
||||
{
|
||||
_SqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig);
|
||||
_SqlBuilder.Context = this.Context;
|
||||
}
|
||||
return _SqlBuilder;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region DML
|
||||
|
@ -58,7 +58,7 @@ namespace SqlSugar
|
||||
foreach (var deleteObj in deleteObjs)
|
||||
{
|
||||
var entityPropertyName = this.Context.EntityProvider.GetPropertyName<T>(primaryField);
|
||||
var columnInfo = EntityInfo.Columns.Single(it => it.PropertyName == entityPropertyName);
|
||||
var columnInfo = EntityInfo.Columns.Single(it => it.PropertyName.Equals(entityPropertyName,StringComparison.CurrentCultureIgnoreCase));
|
||||
var value = columnInfo.PropertyInfo.GetValue(deleteObj, null);
|
||||
primaryKeyValues.Add(value);
|
||||
}
|
||||
@ -171,7 +171,8 @@ namespace SqlSugar
|
||||
|
||||
public IDeleteable<T> With(string lockString)
|
||||
{
|
||||
DeleteBuilder.TableWithString = lockString;
|
||||
if (this.Context.CurrentConnectionConfig.DbType == DbType.SqlServer)
|
||||
DeleteBuilder.TableWithString = lockString;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -92,7 +92,8 @@ namespace SqlSugar
|
||||
|
||||
public IInsertable<T> With(string lockString)
|
||||
{
|
||||
this.InsertBuilder.TableWithString = lockString;
|
||||
if (this.Context.CurrentConnectionConfig.DbType == DbType.SqlServer)
|
||||
this.InsertBuilder.TableWithString = lockString;
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -165,7 +166,8 @@ namespace SqlSugar
|
||||
PropertyType = PubMethod.GetUnderType(column.PropertyInfo),
|
||||
TableId = i
|
||||
};
|
||||
if (columnInfo.PropertyType.IsEnum()) {
|
||||
if (columnInfo.PropertyType.IsEnum())
|
||||
{
|
||||
columnInfo.Value = Convert.ToInt64(columnInfo.Value);
|
||||
}
|
||||
insertItem.Add(columnInfo);
|
||||
|
@ -39,7 +39,7 @@ namespace SqlSugar
|
||||
QueryBuilder.Clear();
|
||||
}
|
||||
|
||||
public ISugarQueryable<T> AS<T2>(string tableName)
|
||||
public virtual ISugarQueryable<T> AS<T2>(string tableName)
|
||||
{
|
||||
var entityName = typeof(T2).Name;
|
||||
IsAs = true;
|
||||
@ -57,13 +57,13 @@ namespace SqlSugar
|
||||
this.Context.MappingTables.Add(entityName, tableName);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T> With(string withString)
|
||||
public virtual ISugarQueryable<T> With(string withString)
|
||||
{
|
||||
QueryBuilder.TableWithString = withString;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T> Filter(string FilterName, bool isDisabledGobalFilter = false)
|
||||
public virtual ISugarQueryable<T> Filter(string FilterName, bool isDisabledGobalFilter = false)
|
||||
{
|
||||
QueryBuilder.IsDisabledGobalFilter = isDisabledGobalFilter;
|
||||
if (this.Context.QueryFilter.GeFilterList.IsValuable() && FilterName.IsValuable())
|
||||
@ -78,24 +78,24 @@ namespace SqlSugar
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T> AddParameters(object parameters)
|
||||
public virtual ISugarQueryable<T> AddParameters(object parameters)
|
||||
{
|
||||
if (parameters != null)
|
||||
QueryBuilder.Parameters.AddRange(Context.Ado.GetParameters(parameters));
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T> AddParameters(SugarParameter[] parameters)
|
||||
public virtual ISugarQueryable<T> AddParameters(SugarParameter[] parameters)
|
||||
{
|
||||
QueryBuilder.Parameters.AddRange(parameters);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T> AddParameters(SugarParameter parameter)
|
||||
public virtual ISugarQueryable<T> AddParameters(SugarParameter parameter)
|
||||
{
|
||||
QueryBuilder.Parameters.Add(parameter);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T> AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left)
|
||||
public virtual ISugarQueryable<T> AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left)
|
||||
{
|
||||
|
||||
QueryBuilder.JoinIndex = +1;
|
||||
@ -116,12 +116,12 @@ namespace SqlSugar
|
||||
this._Where(expression);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T> Where(string whereString, object whereObj = null)
|
||||
public virtual ISugarQueryable<T> Where(string whereString, object whereObj = null)
|
||||
{
|
||||
this.Where<T>(whereString, whereObj);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T> Where<T2>(string whereString, object whereObj = null)
|
||||
public virtual ISugarQueryable<T> Where<T2>(string whereString, object whereObj = null)
|
||||
{
|
||||
var whereValue = QueryBuilder.WhereInfos;
|
||||
whereValue.Add(SqlBuilder.AppendWhereOrAnd(whereValue.Count == 0, whereString));
|
||||
@ -130,12 +130,12 @@ namespace SqlSugar
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T> Having(Expression<Func<T, bool>> expression)
|
||||
public virtual ISugarQueryable<T> Having(Expression<Func<T, bool>> expression)
|
||||
{
|
||||
this._Having(expression);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T> Having(string whereString, object parameters = null)
|
||||
public virtual ISugarQueryable<T> Having(string whereString, object parameters = null)
|
||||
{
|
||||
|
||||
QueryBuilder.HavingInfos = SqlBuilder.AppendHaving(whereString);
|
||||
@ -150,20 +150,20 @@ namespace SqlSugar
|
||||
_Where(expression);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T> WhereIF(bool isWhere, string whereString, object whereObj = null)
|
||||
public virtual ISugarQueryable<T> WhereIF(bool isWhere, string whereString, object whereObj = null)
|
||||
{
|
||||
if (!isWhere) return this;
|
||||
this.Where<T>(whereString, whereObj);
|
||||
return this;
|
||||
}
|
||||
|
||||
public T InSingle(object pkValue)
|
||||
public virtual T InSingle(object pkValue)
|
||||
{
|
||||
var list = In(pkValue).ToList();
|
||||
if (list == null) return default(T);
|
||||
else return list.SingleOrDefault();
|
||||
}
|
||||
public ISugarQueryable<T> In<TParamter>(params TParamter[] pkValues)
|
||||
public virtual ISugarQueryable<T> In<TParamter>(params TParamter[] pkValues)
|
||||
{
|
||||
if (pkValues == null || pkValues.Length == 0)
|
||||
{
|
||||
@ -177,7 +177,7 @@ namespace SqlSugar
|
||||
filed = shortName + filed;
|
||||
return In(filed, pkValues);
|
||||
}
|
||||
public ISugarQueryable<T> In<FieldType>(string filed, params FieldType[] inValues)
|
||||
public virtual ISugarQueryable<T> In<FieldType>(string filed, params FieldType[] inValues)
|
||||
{
|
||||
if (inValues.Length == 1)
|
||||
{
|
||||
@ -217,14 +217,14 @@ namespace SqlSugar
|
||||
}
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T> In<FieldType>(Expression<Func<T, object>> expression, params FieldType[] inValues)
|
||||
public virtual ISugarQueryable<T> In<FieldType>(Expression<Func<T, object>> expression, params FieldType[] inValues)
|
||||
{
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
var fieldName = lamResult.GetResultString();
|
||||
return In(fieldName, inValues);
|
||||
}
|
||||
public ISugarQueryable<T> In<TParamter>(List<TParamter> pkValues) {
|
||||
public virtual ISugarQueryable<T> In<TParamter>(List<TParamter> pkValues) {
|
||||
if (pkValues == null || pkValues.Count == 0)
|
||||
{
|
||||
Where(SqlBuilder.SqlFalse);
|
||||
@ -232,7 +232,7 @@ namespace SqlSugar
|
||||
}
|
||||
return In(pkValues.ToArray());
|
||||
}
|
||||
public ISugarQueryable<T> In<FieldType>(string InFieldName, List<FieldType> inValues) {
|
||||
public virtual ISugarQueryable<T> In<FieldType>(string InFieldName, List<FieldType> inValues) {
|
||||
if (inValues == null || inValues.Count == 0)
|
||||
{
|
||||
Where(SqlBuilder.SqlFalse);
|
||||
@ -240,7 +240,7 @@ namespace SqlSugar
|
||||
}
|
||||
return In(InFieldName, inValues.ToArray());
|
||||
}
|
||||
public ISugarQueryable<T> In<FieldType>(Expression<Func<T, object>> expression, List<FieldType> inValues) {
|
||||
public virtual ISugarQueryable<T> In<FieldType>(Expression<Func<T, object>> expression, List<FieldType> inValues) {
|
||||
if (inValues == null || inValues.Count == 0)
|
||||
{
|
||||
Where(SqlBuilder.SqlFalse);
|
||||
@ -248,7 +248,7 @@ namespace SqlSugar
|
||||
}
|
||||
return In(expression, inValues.ToArray());
|
||||
}
|
||||
public ISugarQueryable<T> OrderBy(string orderFileds)
|
||||
public virtual ISugarQueryable<T> OrderBy(string orderFileds)
|
||||
{
|
||||
var orderByValue = QueryBuilder.OrderByValue;
|
||||
if (QueryBuilder.OrderByValue.IsNullOrEmpty())
|
||||
@ -258,18 +258,18 @@ namespace SqlSugar
|
||||
QueryBuilder.OrderByValue += string.IsNullOrEmpty(orderByValue) ? orderFileds : ("," + orderFileds);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T> OrderBy(Expression<Func<T, object>> expression, OrderByType type = OrderByType.Asc)
|
||||
public virtual ISugarQueryable<T> OrderBy(Expression<Func<T, object>> expression, OrderByType type = OrderByType.Asc)
|
||||
{
|
||||
this._OrderBy(expression, type);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T> GroupBy(Expression<Func<T, object>> expression)
|
||||
public virtual ISugarQueryable<T> GroupBy(Expression<Func<T, object>> expression)
|
||||
{
|
||||
_GroupBy(expression);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T> GroupBy(string groupFileds)
|
||||
public virtual ISugarQueryable<T> GroupBy(string groupFileds)
|
||||
{
|
||||
var croupByValue = QueryBuilder.GroupByValue;
|
||||
if (QueryBuilder.GroupByValue.IsNullOrEmpty())
|
||||
@ -280,14 +280,14 @@ namespace SqlSugar
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T> PartitionBy(Expression<Func<T, object>> expression)
|
||||
public virtual ISugarQueryable<T> PartitionBy(Expression<Func<T, object>> expression)
|
||||
{
|
||||
if (QueryBuilder.Take == null)
|
||||
QueryBuilder.Take = 0;
|
||||
_PartitionBy(expression);
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T> PartitionBy(string groupFileds)
|
||||
public virtual ISugarQueryable<T> PartitionBy(string groupFileds)
|
||||
{
|
||||
var partitionByValue = QueryBuilder.PartitionByValue;
|
||||
if (QueryBuilder.PartitionByValue.IsNullOrEmpty())
|
||||
@ -298,18 +298,18 @@ namespace SqlSugar
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T> Skip(int num)
|
||||
public virtual ISugarQueryable<T> Skip(int num)
|
||||
{
|
||||
QueryBuilder.Skip = num;
|
||||
return this;
|
||||
}
|
||||
public ISugarQueryable<T> Take(int num)
|
||||
public virtual ISugarQueryable<T> Take(int num)
|
||||
{
|
||||
QueryBuilder.Take = num;
|
||||
return this;
|
||||
}
|
||||
|
||||
public T Single()
|
||||
public virtual T Single()
|
||||
{
|
||||
if (QueryBuilder.OrderByValue.IsNullOrEmpty())
|
||||
{
|
||||
@ -327,13 +327,13 @@ namespace SqlSugar
|
||||
return default(T);
|
||||
}
|
||||
}
|
||||
public T Single(Expression<Func<T, bool>> expression)
|
||||
public virtual T Single(Expression<Func<T, bool>> expression)
|
||||
{
|
||||
_Where(expression);
|
||||
return Single();
|
||||
}
|
||||
|
||||
public T First()
|
||||
public virtual T First()
|
||||
{
|
||||
if (QueryBuilder.OrderByValue.IsNullOrEmpty())
|
||||
{
|
||||
@ -351,27 +351,27 @@ namespace SqlSugar
|
||||
return default(T);
|
||||
}
|
||||
}
|
||||
public T First(Expression<Func<T, bool>> expression)
|
||||
public virtual T First(Expression<Func<T, bool>> expression)
|
||||
{
|
||||
_Where(expression);
|
||||
return First();
|
||||
}
|
||||
|
||||
public bool Any(Expression<Func<T, bool>> expression)
|
||||
public virtual bool Any(Expression<Func<T, bool>> expression)
|
||||
{
|
||||
_Where(expression);
|
||||
return Any();
|
||||
}
|
||||
public bool Any()
|
||||
public virtual bool Any()
|
||||
{
|
||||
return this.Count() > 0;
|
||||
}
|
||||
|
||||
public ISugarQueryable<TResult> Select<TResult>(Expression<Func<T, TResult>> expression)
|
||||
public virtual ISugarQueryable<TResult> Select<TResult>(Expression<Func<T, TResult>> expression)
|
||||
{
|
||||
return _Select<TResult>(expression);
|
||||
}
|
||||
public ISugarQueryable<TResult> Select<TResult>(string selectValue) where TResult : class, new()
|
||||
public virtual ISugarQueryable<TResult> Select<TResult>(string selectValue) where TResult : class, new()
|
||||
{
|
||||
var reval = InstanceFactory.GetQueryable<TResult>(this.Context.CurrentConnectionConfig);
|
||||
reval.Context = this.Context;
|
||||
@ -379,13 +379,13 @@ namespace SqlSugar
|
||||
QueryBuilder.SelectValue = selectValue;
|
||||
return reval;
|
||||
}
|
||||
public ISugarQueryable<T> Select(string selectValue)
|
||||
public virtual ISugarQueryable<T> Select(string selectValue)
|
||||
{
|
||||
QueryBuilder.SelectValue = selectValue;
|
||||
return this;
|
||||
}
|
||||
|
||||
public int Count()
|
||||
public virtual int Count()
|
||||
{
|
||||
QueryBuilder.IsCount = true;
|
||||
var sql = QueryBuilder.ToSqlString();
|
||||
@ -395,76 +395,76 @@ namespace SqlSugar
|
||||
return reval;
|
||||
}
|
||||
|
||||
public TResult Max<TResult>(string maxField)
|
||||
public virtual TResult Max<TResult>(string maxField)
|
||||
{
|
||||
this.Select(string.Format(QueryBuilder.MaxTemplate, maxField));
|
||||
var reval = this._ToList<TResult>().SingleOrDefault();
|
||||
return reval;
|
||||
}
|
||||
public TResult Max<TResult>(Expression<Func<T, TResult>> expression)
|
||||
public virtual TResult Max<TResult>(Expression<Func<T, TResult>> expression)
|
||||
{
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
return Max<TResult>(lamResult.GetResultString());
|
||||
}
|
||||
public TResult Min<TResult>(string minField)
|
||||
public virtual TResult Min<TResult>(string minField)
|
||||
{
|
||||
this.Select(string.Format(QueryBuilder.MinTemplate, minField));
|
||||
var reval = this._ToList<TResult>().SingleOrDefault();
|
||||
return reval;
|
||||
}
|
||||
public TResult Min<TResult>(Expression<Func<T, TResult>> expression)
|
||||
public virtual TResult Min<TResult>(Expression<Func<T, TResult>> expression)
|
||||
{
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
return Min<TResult>(lamResult.GetResultString());
|
||||
}
|
||||
public TResult Sum<TResult>(string sumField)
|
||||
public virtual TResult Sum<TResult>(string sumField)
|
||||
{
|
||||
this.Select(string.Format(QueryBuilder.SumTemplate, sumField));
|
||||
var reval = this._ToList<TResult>().SingleOrDefault();
|
||||
return reval;
|
||||
}
|
||||
public TResult Sum<TResult>(Expression<Func<T, TResult>> expression)
|
||||
public virtual TResult Sum<TResult>(Expression<Func<T, TResult>> expression)
|
||||
{
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
return Sum<TResult>(lamResult.GetResultString());
|
||||
}
|
||||
public TResult Avg<TResult>(string avgField)
|
||||
public virtual TResult Avg<TResult>(string avgField)
|
||||
{
|
||||
this.Select(string.Format(QueryBuilder.AvgTemplate, avgField));
|
||||
var reval = this._ToList<TResult>().SingleOrDefault();
|
||||
return reval;
|
||||
}
|
||||
public TResult Avg<TResult>(Expression<Func<T, TResult>> expression)
|
||||
public virtual TResult Avg<TResult>(Expression<Func<T, TResult>> expression)
|
||||
{
|
||||
var isSingle = QueryBuilder.IsSingle();
|
||||
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
|
||||
return Avg<TResult>(lamResult.GetResultString());
|
||||
}
|
||||
|
||||
public string ToJson()
|
||||
public virtual string ToJson()
|
||||
{
|
||||
return this.Context.RewritableMethods.SerializeObject(this.ToList());
|
||||
}
|
||||
public string ToJsonPage(int pageIndex, int pageSize)
|
||||
public virtual string ToJsonPage(int pageIndex, int pageSize)
|
||||
{
|
||||
return this.Context.RewritableMethods.SerializeObject(this.ToPageList(pageIndex, pageSize));
|
||||
}
|
||||
public string ToJsonPage(int pageIndex, int pageSize, ref int totalNumber)
|
||||
public virtual string ToJsonPage(int pageIndex, int pageSize, ref int totalNumber)
|
||||
{
|
||||
return this.Context.RewritableMethods.SerializeObject(this.ToPageList(pageIndex, pageSize, ref totalNumber));
|
||||
}
|
||||
|
||||
public DataTable ToDataTable()
|
||||
public virtual DataTable ToDataTable()
|
||||
{
|
||||
var sqlObj = this.ToSql();
|
||||
RestoreMapping();
|
||||
var result = this.Db.GetDataTable(sqlObj.Key, sqlObj.Value.ToArray());
|
||||
return result;
|
||||
}
|
||||
public DataTable ToDataTablePage(int pageIndex, int pageSize)
|
||||
public virtual DataTable ToDataTablePage(int pageIndex, int pageSize)
|
||||
{
|
||||
if (pageIndex == 0)
|
||||
pageIndex = 1;
|
||||
@ -472,17 +472,17 @@ namespace SqlSugar
|
||||
QueryBuilder.Take = pageSize;
|
||||
return ToDataTable();
|
||||
}
|
||||
public DataTable ToDataTablePage(int pageIndex, int pageSize, ref int totalNumber)
|
||||
public virtual DataTable ToDataTablePage(int pageIndex, int pageSize, ref int totalNumber)
|
||||
{
|
||||
totalNumber = this.Count();
|
||||
return ToDataTablePage(pageIndex, pageSize);
|
||||
}
|
||||
|
||||
public List<T> ToList()
|
||||
public virtual List<T> ToList()
|
||||
{
|
||||
return _ToList<T>();
|
||||
}
|
||||
public List<T> ToPageList(int pageIndex, int pageSize)
|
||||
public virtual List<T> ToPageList(int pageIndex, int pageSize)
|
||||
{
|
||||
if (pageIndex == 0)
|
||||
pageIndex = 1;
|
||||
@ -490,13 +490,13 @@ namespace SqlSugar
|
||||
QueryBuilder.Take = pageSize;
|
||||
return ToList();
|
||||
}
|
||||
public List<T> ToPageList(int pageIndex, int pageSize, ref int totalNumber)
|
||||
public virtual List<T> ToPageList(int pageIndex, int pageSize, ref int totalNumber)
|
||||
{
|
||||
totalNumber = this.Count();
|
||||
return ToPageList(pageIndex, pageSize);
|
||||
}
|
||||
|
||||
public KeyValuePair<string, List<SugarParameter>> ToSql()
|
||||
public virtual KeyValuePair<string, List<SugarParameter>> ToSql()
|
||||
{
|
||||
string sql = QueryBuilder.ToSqlString();
|
||||
RestoreMapping();
|
||||
|
@ -142,7 +142,7 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
|
||||
private string TomultipleSqlString(List<IGrouping<int, DbColumnInfo>> groupList)
|
||||
protected virtual string TomultipleSqlString(List<IGrouping<int, DbColumnInfo>> groupList)
|
||||
{
|
||||
Check.Exception(PrimaryKeys == null || PrimaryKeys.Count == 0, " Update List<T> need Primary key");
|
||||
int pageSize = 200;
|
||||
@ -204,7 +204,7 @@ namespace SqlSugar
|
||||
return batchUpdateSql.ToString();
|
||||
}
|
||||
|
||||
private string ToSingleSqlString(List<IGrouping<int, DbColumnInfo>> groupList)
|
||||
protected virtual string ToSingleSqlString(List<IGrouping<int, DbColumnInfo>> groupList)
|
||||
{
|
||||
string columnsString = string.Join(",", groupList.First().Where(it => it.IsPrimarykey == false && (it.IsIdentity == false || (IsOffIdentity && it.IsIdentity))).Select(it =>
|
||||
{
|
||||
|
@ -135,7 +135,8 @@ namespace SqlSugar
|
||||
}
|
||||
public IUpdateable<T> With(string lockString)
|
||||
{
|
||||
this.UpdateBuilder.TableWithString = lockString;
|
||||
if (this.Context.CurrentConnectionConfig.DbType == DbType.SqlServer)
|
||||
this.UpdateBuilder.TableWithString = lockString;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -102,12 +102,20 @@ namespace SqlSugar
|
||||
addValue = DateTime.MinValue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (item.PropertyType == PubConst.IntType)
|
||||
{
|
||||
addValue = Convert.ToInt32(addValue);
|
||||
}
|
||||
}
|
||||
result.Add(name, addValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
var stringValue = SerializeObject(result);
|
||||
if (stringValue.IsValuable()) {
|
||||
if (stringValue.IsValuable())
|
||||
{
|
||||
stringValue = stringValue.Replace(":{}", ":null");
|
||||
}
|
||||
reval.Add((T)DeserializeObject<T>(stringValue));
|
||||
|
@ -161,7 +161,7 @@ namespace SqlSugar
|
||||
public static object DynamicInvoke(MemberExpression expression)
|
||||
{
|
||||
object value = Expression.Lambda(expression).Compile().DynamicInvoke();
|
||||
if (value != null && value.GetType().IsClass()& value.GetType() != ExpressionConst.StringType)
|
||||
if (value != null && value.GetType().IsClass() && value.GetType() != ExpressionConst.StringType)
|
||||
{
|
||||
value = Expression.Lambda(expression).Compile().DynamicInvoke();
|
||||
}
|
||||
|
@ -150,10 +150,10 @@ namespace SqlSugar
|
||||
get; set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 如果类库是.NET 4.5请删除该属性
|
||||
/// If the SqlSugar library is.NET 4.5, delete the property
|
||||
/// </summary>
|
||||
///// <summary>
|
||||
///// 如果类库是.NET 4.5请删除该属性
|
||||
///// If the SqlSugar library is.NET 4.5, delete the property
|
||||
///// </summary>
|
||||
//public override DataRowVersion SourceVersion
|
||||
//{
|
||||
// get; set;
|
||||
|
@ -83,21 +83,21 @@ namespace SqlSugar
|
||||
return string.Format(" ({0} IN ({1})) ", value, inValueString);
|
||||
}
|
||||
|
||||
public string Equals(MethodCallExpressionModel model)
|
||||
public virtual string Equals(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
return string.Format(" ({0} = {1}) ", parameter.MemberName, parameter2.MemberName); ;
|
||||
}
|
||||
|
||||
public string DateIsSameDay(MethodCallExpressionModel model)
|
||||
public virtual string DateIsSameDay(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
return string.Format(" (DATEDIFF(day,{0},{1})=0) ", parameter.MemberName, parameter2.MemberName); ;
|
||||
}
|
||||
|
||||
public string DateIsSameByType(MethodCallExpressionModel model)
|
||||
public virtual string DateIsSameByType(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
@ -105,7 +105,7 @@ namespace SqlSugar
|
||||
return string.Format(" (DATEDIFF({2},{0},{1})=0) ", parameter.MemberName, parameter2.MemberName, parameter3.MemberName);
|
||||
}
|
||||
|
||||
public string DateAddByType(MethodCallExpressionModel model)
|
||||
public virtual string DateAddByType(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
@ -113,14 +113,14 @@ namespace SqlSugar
|
||||
return string.Format(" (DATEADD({2},{1},{0})) ", parameter.MemberName, parameter2.MemberName, parameter3.MemberName);
|
||||
}
|
||||
|
||||
public string DateAddDay(MethodCallExpressionModel model)
|
||||
public virtual string DateAddDay(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
return string.Format(" (DATEADD(day,{1},{0})) ", parameter.MemberName, parameter2.MemberName);
|
||||
}
|
||||
|
||||
public string Between(MethodCallExpressionModel model)
|
||||
public virtual string Between(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter1 = model.Args[1];
|
||||
@ -128,75 +128,75 @@ namespace SqlSugar
|
||||
return string.Format(" ({0} BETWEEN {1} AND {2}) ", parameter.MemberName, parameter1.MemberName, parameter2.MemberName);
|
||||
}
|
||||
|
||||
public string StartsWith(MethodCallExpressionModel model)
|
||||
public virtual string StartsWith(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
return string.Format(" ({0} like {1}+'%') ", parameter.MemberName, parameter2.MemberName);
|
||||
}
|
||||
|
||||
public string EndsWith(MethodCallExpressionModel model)
|
||||
public virtual string EndsWith(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
return string.Format(" ({0} like '%'+{1}) ", parameter.MemberName, parameter2.MemberName);
|
||||
}
|
||||
|
||||
public string DateValue(MethodCallExpressionModel model)
|
||||
public virtual string DateValue(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
return string.Format(" ({0}({1})) ", parameter2.MemberName, parameter.MemberName);
|
||||
}
|
||||
|
||||
public string ToInt32(MethodCallExpressionModel model)
|
||||
public virtual string ToInt32(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS INT)", parameter.MemberName);
|
||||
}
|
||||
|
||||
public string ToInt64(MethodCallExpressionModel model)
|
||||
public virtual string ToInt64(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS BIGINT)", parameter.MemberName);
|
||||
}
|
||||
|
||||
public string ToString(MethodCallExpressionModel model)
|
||||
public virtual string ToString(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS NVARCHAR(MAX))", parameter.MemberName);
|
||||
}
|
||||
|
||||
public string ToGuid(MethodCallExpressionModel model)
|
||||
public virtual string ToGuid(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS UNIQUEIDENTIFIER)", parameter.MemberName);
|
||||
}
|
||||
|
||||
public string ToDouble(MethodCallExpressionModel model)
|
||||
public virtual string ToDouble(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS FLOAT)", parameter.MemberName);
|
||||
}
|
||||
|
||||
public string ToBool(MethodCallExpressionModel model)
|
||||
public virtual string ToBool(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS BIT)", parameter.MemberName);
|
||||
}
|
||||
|
||||
public string ToDate(MethodCallExpressionModel model)
|
||||
public virtual string ToDate(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS DATETIME)", parameter.MemberName);
|
||||
}
|
||||
|
||||
public string ToDecimal(MethodCallExpressionModel model)
|
||||
public virtual string ToDecimal(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS MONEY)", parameter.MemberName);
|
||||
}
|
||||
public string Substring(MethodCallExpressionModel model)
|
||||
public virtual string Substring(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
@ -204,13 +204,13 @@ namespace SqlSugar
|
||||
return string.Format("SUBSTRING({0},1 + {1},{2})", parameter.MemberName, parameter2.MemberName, parameter3.MemberName);
|
||||
}
|
||||
|
||||
public string Length(MethodCallExpressionModel model)
|
||||
public virtual string Length(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format("LEN({0})", parameter.MemberName);
|
||||
}
|
||||
|
||||
public string Replace(MethodCallExpressionModel model)
|
||||
public virtual string Replace(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
@ -218,31 +218,31 @@ namespace SqlSugar
|
||||
return string.Format("REPLACE({0},{1},{2})", parameter.MemberName, parameter2.MemberName, parameter3.MemberName);
|
||||
}
|
||||
|
||||
public string AggregateSum(MethodCallExpressionModel model)
|
||||
public virtual string AggregateSum(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format("SUM({0})", parameter.MemberName);
|
||||
}
|
||||
|
||||
public string AggregateAvg(MethodCallExpressionModel model)
|
||||
public virtual string AggregateAvg(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format("AVG({0})", parameter.MemberName);
|
||||
}
|
||||
|
||||
public string AggregateMin(MethodCallExpressionModel model)
|
||||
public virtual string AggregateMin(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format("MIN({0})", parameter.MemberName);
|
||||
}
|
||||
|
||||
public string AggregateMax(MethodCallExpressionModel model)
|
||||
public virtual string AggregateMax(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format("MAX({0})", parameter.MemberName);
|
||||
}
|
||||
|
||||
public string AggregateCount(MethodCallExpressionModel model)
|
||||
public virtual string AggregateCount(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format("COUNT({0})", parameter.MemberName);
|
||||
|
@ -282,7 +282,7 @@ namespace SqlSugar
|
||||
}
|
||||
else
|
||||
{
|
||||
var asName = "[" + item.Type.Name + "." + property.Name + "]";
|
||||
var asName = this.Context.GetTranslationText(item.Type.Name + "." + property.Name );
|
||||
var columnName = property.Name;
|
||||
if (Context.IsJoin)
|
||||
{
|
||||
|
@ -258,7 +258,7 @@ namespace SqlSugar
|
||||
|
||||
private void CheckMethod(MethodCallExpression expression)
|
||||
{
|
||||
Check.Exception(expression.Method.DeclaringType.FullName != ExpressionConst.SqlFuncFullName,string.Format(ExpressionErrorMessage.MethodError, expression.Method.Name));
|
||||
Check.Exception(expression.Method.DeclaringType.FullName != ExpressionConst.SqlFuncFullName, string.Format(ExpressionErrorMessage.MethodError, expression.Method.Name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Runtime.Loader;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
namespace SqlSugar
|
||||
|
@ -18,7 +18,7 @@ namespace SqlSugar
|
||||
IDeleteable<T> In<PkType>(PkType primaryKeyValue);
|
||||
IDeleteable<T> In<PkType>(PkType[] primaryKeyValues);
|
||||
IDeleteable<T> In<PkType>(List<PkType> primaryKeyValues);
|
||||
IDeleteable<T> Where(string whereString, object parameters = null);
|
||||
IDeleteable<T> Where(string whereString,object parameters=null);
|
||||
IDeleteable<T> Where(string whereString, SugarParameter parameter);
|
||||
IDeleteable<T> Where(string whereString, SugarParameter[] parameters);
|
||||
IDeleteable<T> Where(string whereString, List<SugarParameter> parameters);
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using MySql.Data.MySqlClient;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.SqlClient;
|
||||
@ -507,6 +508,133 @@ namespace SqlSugar
|
||||
columns.Add(new DataColumn(name, dr.GetFieldType(i)));
|
||||
}
|
||||
|
||||
while (dr.Read())
|
||||
{
|
||||
DataRow daRow = new DataRow();
|
||||
for (int i = 0; i < columns.Count; i++)
|
||||
{
|
||||
if (!daRow.ContainsKey(columns[i].ColumnName))
|
||||
daRow.Add(columns[i].ColumnName, dr.GetValue(i));
|
||||
}
|
||||
dt.Rows.Add(daRow);
|
||||
}
|
||||
ds.Tables.Add(dt);
|
||||
} while (dr.NextResult());
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 数据填充器
|
||||
/// </summary>
|
||||
public class MySqlDataAdapter : IDataAdapter
|
||||
{
|
||||
private MySqlCommand command;
|
||||
private string sql;
|
||||
private MySqlConnection _sqlConnection;
|
||||
|
||||
/// <summary>
|
||||
/// SqlDataAdapter
|
||||
/// </summary>
|
||||
/// <param name="command"></param>
|
||||
public MySqlDataAdapter(MySqlCommand command)
|
||||
{
|
||||
this.command = command;
|
||||
}
|
||||
|
||||
public MySqlDataAdapter()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// SqlDataAdapter
|
||||
/// </summary>
|
||||
/// <param name="sql"></param>
|
||||
/// <param name="_sqlConnection"></param>
|
||||
public MySqlDataAdapter(string sql, MySqlConnection _sqlConnection)
|
||||
{
|
||||
this.sql = sql;
|
||||
this._sqlConnection = _sqlConnection;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// SelectCommand
|
||||
/// </summary>
|
||||
public MySqlCommand SelectCommand
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.command == null)
|
||||
{
|
||||
this.command = new MySqlCommand(this.sql, this._sqlConnection);
|
||||
}
|
||||
return this.command;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.command = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fill
|
||||
/// </summary>
|
||||
/// <param name="dt"></param>
|
||||
public void Fill(DataTable dt)
|
||||
{
|
||||
if (dt == null)
|
||||
{
|
||||
dt = new DataTable();
|
||||
}
|
||||
var columns = dt.Columns;
|
||||
var rows = dt.Rows;
|
||||
using (MySqlDataReader dr = command.ExecuteReader())
|
||||
{
|
||||
for (int i = 0; i < dr.FieldCount; i++)
|
||||
{
|
||||
string name = dr.GetName(i).Trim();
|
||||
if (!columns.ContainsKey(name))
|
||||
columns.Add(new DataColumn(name, dr.GetFieldType(i)));
|
||||
}
|
||||
|
||||
while (dr.Read())
|
||||
{
|
||||
DataRow daRow = new DataRow();
|
||||
for (int i = 0; i < columns.Count; i++)
|
||||
{
|
||||
if (!daRow.ContainsKey(columns[i].ColumnName))
|
||||
daRow.Add(columns[i].ColumnName, dr.GetValue(i));
|
||||
}
|
||||
dt.Rows.Add(daRow);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fill
|
||||
/// </summary>
|
||||
/// <param name="ds"></param>
|
||||
public void Fill(DataSet ds)
|
||||
{
|
||||
if (ds == null)
|
||||
{
|
||||
ds = new DataSet();
|
||||
}
|
||||
using (MySqlDataReader dr = command.ExecuteReader())
|
||||
{
|
||||
do
|
||||
{
|
||||
var dt = new DataTable();
|
||||
var columns = dt.Columns;
|
||||
var rows = dt.Rows;
|
||||
for (int i = 0; i < dr.FieldCount; i++)
|
||||
{
|
||||
string name = dr.GetName(i).Trim();
|
||||
if (!columns.ContainsKey(name))
|
||||
columns.Add(new DataColumn(name, dr.GetFieldType(i)));
|
||||
}
|
||||
|
||||
while (dr.Read())
|
||||
{
|
||||
DataRow daRow = new DataRow();
|
||||
|
@ -0,0 +1,67 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class MySqlCodeFirst : CodeFirstProvider
|
||||
{
|
||||
public override void NoExistLogic(EntityInfo entityInfo)
|
||||
{
|
||||
var tableName = GetTableName(entityInfo);
|
||||
Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1");
|
||||
List<DbColumnInfo> columns = new List<DbColumnInfo>();
|
||||
if (entityInfo.Columns.IsValuable())
|
||||
{
|
||||
foreach (var item in entityInfo.Columns)
|
||||
{
|
||||
DbColumnInfo dbColumnInfo = this.EntityColumnToDbColumn(entityInfo, tableName, item);
|
||||
columns.Add(dbColumnInfo);
|
||||
}
|
||||
}
|
||||
this.Context.DbMaintenance.CreateTable(tableName, columns);
|
||||
}
|
||||
protected override DbColumnInfo EntityColumnToDbColumn(EntityInfo entityInfo, string tableName, EntityColumnInfo item)
|
||||
{
|
||||
var result = new DbColumnInfo()
|
||||
{
|
||||
DataType = this.Context.Ado.DbBind.GetDbTypeName(PubMethod.GetUnderType(item.PropertyInfo).Name),
|
||||
TableId = entityInfo.Columns.IndexOf(item),
|
||||
DbColumnName = item.DbColumnName.IsValuable() ? item.DbColumnName : item.PropertyName,
|
||||
IsPrimarykey = item.IsPrimarykey,
|
||||
IsIdentity = item.IsIdentity,
|
||||
TableName = tableName,
|
||||
IsNullable = item.IsNullable,
|
||||
DefaultValue = item.DefaultValue,
|
||||
ColumnDescription = item.ColumnDescription,
|
||||
Length = item.Length
|
||||
};
|
||||
if (result.DataType.Equals("varchar", StringComparison.CurrentCultureIgnoreCase) && result.Length == 0)
|
||||
{
|
||||
result.Length = 1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
protected override void ConvertColumns(List<DbColumnInfo> dbColumns)
|
||||
{
|
||||
foreach (var item in dbColumns)
|
||||
{
|
||||
if (item.DataType == "DateTime")
|
||||
{
|
||||
item.Length = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void ChangeKey(EntityInfo entityInfo, string tableName, EntityColumnInfo item)
|
||||
{
|
||||
this.Context.DbMaintenance.UpdateColumn(tableName, EntityColumnToDbColumn(entityInfo, tableName, item));
|
||||
if (!item.IsPrimarykey)
|
||||
this.Context.DbMaintenance.DropConstraint(tableName,null);
|
||||
if (item.IsPrimarykey)
|
||||
this.Context.DbMaintenance.AddPrimaryKey(tableName, item.DbColumnName);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,79 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class MySqlDbBind : DbBindProvider
|
||||
{
|
||||
public override string GetDbTypeName(string csharpTypeName)
|
||||
{
|
||||
if (csharpTypeName == PubConst.ByteArrayType.Name)
|
||||
{
|
||||
return "blob";
|
||||
}
|
||||
if (csharpTypeName == "Int32")
|
||||
csharpTypeName = "int";
|
||||
if (csharpTypeName == "Int16")
|
||||
csharpTypeName = "short";
|
||||
if (csharpTypeName == "Int64")
|
||||
csharpTypeName = "long";
|
||||
if (csharpTypeName == "Boolean")
|
||||
csharpTypeName = "bool";
|
||||
var mappings = this.MappingTypes.Where(it => it.Value.ToString().Equals(csharpTypeName, StringComparison.CurrentCultureIgnoreCase));
|
||||
return mappings.IsValuable() ? mappings.First().Key : "varchar";
|
||||
}
|
||||
public override List<KeyValuePair<string, CSharpDataType>> MappingTypes
|
||||
{
|
||||
get
|
||||
{
|
||||
return new List<KeyValuePair<string, CSharpDataType>>()
|
||||
{
|
||||
|
||||
new KeyValuePair<string, CSharpDataType>("int",CSharpDataType.@int),
|
||||
new KeyValuePair<string, CSharpDataType>("mediumint",CSharpDataType.@int),
|
||||
new KeyValuePair<string, CSharpDataType>("integer",CSharpDataType.@int),
|
||||
|
||||
new KeyValuePair<string, CSharpDataType>("varchar",CSharpDataType.@string),
|
||||
new KeyValuePair<string, CSharpDataType>("text",CSharpDataType.@string),
|
||||
new KeyValuePair<string, CSharpDataType>("char",CSharpDataType.@string),
|
||||
new KeyValuePair<string, CSharpDataType>("enum",CSharpDataType.@string),
|
||||
|
||||
new KeyValuePair<string, CSharpDataType>("tinyint",CSharpDataType.@byte),
|
||||
new KeyValuePair<string, CSharpDataType>("smallint",CSharpDataType.@short),
|
||||
new KeyValuePair<string, CSharpDataType>("bigint",CSharpDataType.@long),
|
||||
new KeyValuePair<string, CSharpDataType>("bit",CSharpDataType.@bool),
|
||||
new KeyValuePair<string, CSharpDataType>("real",CSharpDataType.@double),
|
||||
new KeyValuePair<string, CSharpDataType>("double",CSharpDataType.@double),
|
||||
new KeyValuePair<string, CSharpDataType>("float",CSharpDataType.@float),
|
||||
new KeyValuePair<string, CSharpDataType>("decimal",CSharpDataType.@decimal),
|
||||
new KeyValuePair<string, CSharpDataType>("numeric",CSharpDataType.@decimal),
|
||||
new KeyValuePair<string, CSharpDataType>("year",CSharpDataType.@int),
|
||||
|
||||
new KeyValuePair<string, CSharpDataType>("datetime",CSharpDataType.DateTime),
|
||||
new KeyValuePair<string, CSharpDataType>("timestamp",CSharpDataType.DateTime),
|
||||
new KeyValuePair<string, CSharpDataType>("date",CSharpDataType.DateTime),
|
||||
new KeyValuePair<string, CSharpDataType>("time",CSharpDataType.DateTime),
|
||||
|
||||
new KeyValuePair<string, CSharpDataType>("blob",CSharpDataType.byteArray),
|
||||
new KeyValuePair<string, CSharpDataType>("tinyblob",CSharpDataType.byteArray),
|
||||
new KeyValuePair<string, CSharpDataType>("varbinary",CSharpDataType.byteArray),
|
||||
new KeyValuePair<string, CSharpDataType>("binary",CSharpDataType.byteArray),
|
||||
new KeyValuePair<string, CSharpDataType>("multipoint",CSharpDataType.byteArray),
|
||||
new KeyValuePair<string, CSharpDataType>("geometry",CSharpDataType.byteArray),
|
||||
new KeyValuePair<string, CSharpDataType>("multilinestring",CSharpDataType.byteArray),
|
||||
new KeyValuePair<string, CSharpDataType>("polygon",CSharpDataType.byteArray),
|
||||
|
||||
new KeyValuePair<string, CSharpDataType>("varchar",CSharpDataType.Guid),
|
||||
};
|
||||
}
|
||||
}
|
||||
public override List<string> StringThrow
|
||||
{
|
||||
get
|
||||
{
|
||||
return new List<string>() { "int32", "datetime", "decimal", "double", "byte"};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class MySqlDbFirst : DbFirstProvider
|
||||
{
|
||||
}
|
||||
}
|
@ -0,0 +1,231 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class MySqlDbMaintenance : DbMaintenanceProvider
|
||||
{
|
||||
#region DML
|
||||
protected override string GetColumnInfosByTableNameSql
|
||||
{
|
||||
get
|
||||
{
|
||||
string sql = @"SELECT
|
||||
0 as TableId,
|
||||
TABLE_NAME as TableName,
|
||||
column_name AS DbColumnName,
|
||||
CASE WHEN left(COLUMN_TYPE,LOCATE('(',COLUMN_TYPE)-1)='' THEN COLUMN_TYPE ELSE left(COLUMN_TYPE,LOCATE('(',COLUMN_TYPE)-1) END AS DataType,
|
||||
CAST(SUBSTRING(COLUMN_TYPE,LOCATE('(',COLUMN_TYPE)+1,LOCATE(')',COLUMN_TYPE)-LOCATE('(',COLUMN_TYPE)-1) AS signed) AS Length,
|
||||
column_default AS `DefaultValue`,
|
||||
column_comment AS `ColumnDescription`,
|
||||
CASE WHEN COLUMN_KEY = 'PRI'
|
||||
THEN true ELSE false END AS `IsPrimaryKey`,
|
||||
CASE WHEN EXTRA='auto_increment' THEN true ELSE false END as IsIdentity,
|
||||
CASE WHEN is_nullable = 'YES'
|
||||
THEN true ELSE false END AS `IsNullable`
|
||||
FROM
|
||||
Information_schema.columns where TABLE_NAME='{0}' and TABLE_SCHEMA=(select database()) ORDER BY TABLE_NAME";
|
||||
return sql;
|
||||
}
|
||||
}
|
||||
protected override string GetTableInfoListSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return @"select TABLE_NAME as Name,TABLE_COMMENT as Description from information_schema.tables
|
||||
where TABLE_SCHEMA=(select database()) AND TABLE_TYPE='BASE TABLE'";
|
||||
}
|
||||
}
|
||||
protected override string GetViewInfoListSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return @"select TABLE_NAME as Name,TABLE_COMMENT as Description from information_schema.tables
|
||||
where TABLE_SCHEMA=(select database()) AND TABLE_TYPE='VIEW'
|
||||
";
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region DDL
|
||||
protected override string AddPrimaryKeySql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "ALTER TABLE {0} ADD PRIMARY KEY({2}) /*{1}*/";
|
||||
}
|
||||
}
|
||||
protected override string AddColumnToTableSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "ALTER TABLE {0} ADD {1} {2}{3} {4} {5} {6}";
|
||||
}
|
||||
}
|
||||
protected override string AlterColumnToTableSql
|
||||
{
|
||||
get
|
||||
{
|
||||
// return "ALTER TABLE {0} ALTER COLUMN {1} {2}{3} {4} {5} {6}";
|
||||
return "alter table {0} change column {1} {1} {2}{3} {4} {5} {6}";
|
||||
}
|
||||
}
|
||||
protected override string BackupDataBaseSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "mysqldump.exe {0} -uroot -p > {1} ";
|
||||
}
|
||||
}
|
||||
protected override string CreateTableSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "CREATE TABLE {0}(\r\n{1} $PrimaryKey)";
|
||||
}
|
||||
}
|
||||
protected override string CreateTableColumn
|
||||
{
|
||||
get
|
||||
{
|
||||
return "{0} {1}{2} {3} {4} {5}";
|
||||
}
|
||||
}
|
||||
protected override string TruncateTableSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "TRUNCATE TABLE {0}";
|
||||
}
|
||||
}
|
||||
protected override string BackupTableSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "SELECT * INTO {1} FROM {2} limit 0,{0}";
|
||||
}
|
||||
}
|
||||
protected override string DropTableSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "DROP TABLE {0}";
|
||||
}
|
||||
}
|
||||
protected override string DropColumnToTableSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "ALTER TABLE {0} DROP COLUMN {1}";
|
||||
}
|
||||
}
|
||||
protected override string DropConstraintSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "ALTER TABLE {0} drop primary key;";
|
||||
}
|
||||
}
|
||||
protected override string RenameColumnSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "exec sp_rename '{0}.{1}','{2}','column';";
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Check
|
||||
protected override string CheckSystemTablePermissionsSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "select 1 from Information_schema.columns limit 0,1";
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Scattered
|
||||
protected override string CreateTableNull
|
||||
{
|
||||
get
|
||||
{
|
||||
return "DEFAULT NULL";
|
||||
}
|
||||
}
|
||||
protected override string CreateTableNotNull
|
||||
{
|
||||
get
|
||||
{
|
||||
return "NOT NULL";
|
||||
}
|
||||
}
|
||||
protected override string CreateTablePirmaryKey
|
||||
{
|
||||
get
|
||||
{
|
||||
return "PRIMARY KEY";
|
||||
}
|
||||
}
|
||||
protected override string CreateTableIdentity
|
||||
{
|
||||
get
|
||||
{
|
||||
return "AUTO_INCREMENT";
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
public override bool CreateTable(string tableName, List<DbColumnInfo> columns)
|
||||
{
|
||||
if (columns.IsValuable())
|
||||
{
|
||||
foreach (var item in columns)
|
||||
{
|
||||
if (item.DbColumnName.Equals("GUID",StringComparison.CurrentCultureIgnoreCase))
|
||||
{
|
||||
item.Length = 10;
|
||||
}
|
||||
}
|
||||
}
|
||||
string sql = GetCreateTableSql(tableName, columns);
|
||||
string primaryKeyInfo = null;
|
||||
if (columns.Any(it => it.IsIdentity)) {
|
||||
primaryKeyInfo =string.Format( ", Primary key({0})",string.Join(",",columns.Where(it=>it.IsIdentity).Select(it=>this.SqlBuilder.GetTranslationColumnName(it.DbColumnName))));
|
||||
|
||||
}
|
||||
sql = sql.Replace("$PrimaryKey", primaryKeyInfo);
|
||||
this.Context.Ado.ExecuteCommand(sql);
|
||||
return true;
|
||||
}
|
||||
protected override string GetCreateTableSql(string tableName, List<DbColumnInfo> columns)
|
||||
{
|
||||
List<string> columnArray = new List<string>();
|
||||
Check.Exception(columns.IsNullOrEmpty(), "No columns found ");
|
||||
foreach (var item in columns)
|
||||
{
|
||||
string columnName = item.DbColumnName;
|
||||
string dataType = item.DataType;
|
||||
if (dataType == "varchar"&& item.Length==0) {
|
||||
item.Length = 1;
|
||||
}
|
||||
string dataSize = item.Length > 0 ? string.Format("({0})", item.Length) : null;
|
||||
string nullType = item.IsNullable ? this.CreateTableNull : CreateTableNotNull;
|
||||
string primaryKey = null;
|
||||
string identity = item.IsIdentity ? this.CreateTableIdentity : null;
|
||||
string addItem = string.Format(this.CreateTableColumn, this.SqlBuilder.GetTranslationColumnName(columnName), dataType, dataSize, nullType, primaryKey, identity);
|
||||
columnArray.Add(addItem);
|
||||
}
|
||||
string tableString = string.Format(this.CreateTableSql, this.SqlBuilder.GetTranslationTableName(tableName), string.Join(",\r\n", columnArray));
|
||||
return tableString;
|
||||
}
|
||||
public override bool IsAnyConstraint(string constraintName)
|
||||
{
|
||||
throw new NotSupportedException("MySql IsAnyConstraint NotSupportedException");
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
public partial class DbType
|
||||
{
|
||||
public const string MySql = "MySql";
|
||||
}
|
||||
}
|
@ -0,0 +1,99 @@
|
||||
using MySql.Data.MySqlClient;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class MySqlProvider : AdoProvider
|
||||
{
|
||||
public MySqlProvider() { }
|
||||
public override IDbConnection Connection
|
||||
{
|
||||
get
|
||||
{
|
||||
if (base._DbConnection == null)
|
||||
{
|
||||
base._DbConnection = new MySqlConnection(base.Context.CurrentConnectionConfig.ConnectionString);
|
||||
}
|
||||
return base._DbConnection;
|
||||
}
|
||||
set
|
||||
{
|
||||
base._DbConnection = value;
|
||||
}
|
||||
}
|
||||
|
||||
public override void BeginTran(string transactionName)
|
||||
{
|
||||
((MySqlConnection)this.Connection).BeginTransaction();
|
||||
}
|
||||
/// <summary>
|
||||
/// Only SqlServer
|
||||
/// </summary>
|
||||
/// <param name="iso"></param>
|
||||
/// <param name="transactionName"></param>
|
||||
public override void BeginTran(IsolationLevel iso, string transactionName)
|
||||
{
|
||||
((MySqlConnection)this.Connection).BeginTransaction(iso);
|
||||
}
|
||||
public override IDataAdapter GetAdapter()
|
||||
{
|
||||
return new MySqlDataAdapter();
|
||||
}
|
||||
public override IDbCommand GetCommand(string sql, SugarParameter[] parameters)
|
||||
{
|
||||
MySqlCommand sqlCommand = new MySqlCommand(sql, (MySqlConnection)this.Connection);
|
||||
sqlCommand.CommandType = this.CommandType;
|
||||
sqlCommand.CommandTimeout = this.CommandTimeOut;
|
||||
if (this.Transaction != null)
|
||||
{
|
||||
sqlCommand.Transaction = (MySqlTransaction)this.Transaction;
|
||||
}
|
||||
if (parameters.IsValuable())
|
||||
{
|
||||
IDataParameter[] ipars = ToIDbDataParameter(parameters);
|
||||
sqlCommand.Parameters.AddRange((MySqlParameter[])ipars);
|
||||
}
|
||||
CheckConnection();
|
||||
return sqlCommand;
|
||||
}
|
||||
public override void SetCommandToAdapter(IDataAdapter dataAdapter, IDbCommand command)
|
||||
{
|
||||
((MySqlDataAdapter)dataAdapter).SelectCommand = (MySqlCommand)command;
|
||||
}
|
||||
/// <summary>
|
||||
/// if mysql return MySqlParameter[] pars
|
||||
/// if sqlerver return SqlParameter[] pars ...
|
||||
/// </summary>
|
||||
/// <param name="parameters"></param>
|
||||
/// <returns></returns>
|
||||
public override IDataParameter[] ToIDbDataParameter(params SugarParameter[] parameters)
|
||||
{
|
||||
if (parameters == null || parameters.Length == 0) return null;
|
||||
MySqlParameter[] result = new MySqlParameter[parameters.Length];
|
||||
int index = 0;
|
||||
foreach (var parameter in parameters)
|
||||
{
|
||||
if (parameter.Value == null) parameter.Value = DBNull.Value;
|
||||
var sqlParameter = new MySqlParameter();
|
||||
sqlParameter.ParameterName = parameter.ParameterName;
|
||||
sqlParameter.Size = parameter.Size;
|
||||
sqlParameter.Value = parameter.Value;
|
||||
sqlParameter.DbType = parameter.DbType;
|
||||
sqlParameter.Direction = parameter.Direction;
|
||||
result[index] = sqlParameter;
|
||||
if (sqlParameter.Direction == ParameterDirection.Output) {
|
||||
if (this.OutputParameters == null) this.OutputParameters = new List<IDataParameter>();
|
||||
this.OutputParameters.RemoveAll(it => it.ParameterName == sqlParameter.ParameterName);
|
||||
this.OutputParameters.Add(sqlParameter);
|
||||
}
|
||||
++index;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class MySqlQueryable<T>:QueryableProvider<T>
|
||||
{
|
||||
public override ISugarQueryable<T> With(string withString)
|
||||
{
|
||||
return this;
|
||||
}
|
||||
}
|
||||
public class MySqlQueryable<T,T2> : QueryableProvider<T,T2>
|
||||
{
|
||||
|
||||
}
|
||||
public class MySqlQueryable<T, T2,T3> : QueryableProvider<T, T2,T3>
|
||||
{
|
||||
|
||||
}
|
||||
public class MySqlQueryable<T, T2,T3,T4> : QueryableProvider<T, T2,T3,T4>
|
||||
{
|
||||
|
||||
}
|
||||
public class MySqlQueryable<T, T2, T3, T4, T5> : QueryableProvider<T, T2, T3, T4, T5>
|
||||
{
|
||||
|
||||
}
|
||||
public class MySqlQueryable<T, T2, T3, T4, T5, T6> : QueryableProvider<T, T2, T3, T4, T5, T6>
|
||||
{
|
||||
|
||||
}
|
||||
public class MySqlQueryable<T, T2, T3, T4, T5, T6, T7> : QueryableProvider<T, T2, T3, T4, T5, T6, T7>
|
||||
{
|
||||
|
||||
}
|
||||
public class MySqlQueryable<T, T2, T3, T4, T5, T6, T7, T8> : QueryableProvider<T, T2, T3, T4, T5, T6, T7, T8>
|
||||
{
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class MySqlBuilder : SqlBuilderProvider
|
||||
{
|
||||
|
||||
public override string GetTranslationTableName(string name)
|
||||
{
|
||||
if (name.Contains("`")) return name;
|
||||
Check.ArgumentNullException(name, string.Format(ErrorMessage.ObjNotExist, "Table Name"));
|
||||
var context = this.Context;
|
||||
var mappingInfo = context
|
||||
.MappingTables
|
||||
.FirstOrDefault(it => it.EntityName.Equals(name, StringComparison.CurrentCultureIgnoreCase));
|
||||
return "`" + (mappingInfo == null ? name : mappingInfo.DbTableName) + "`";
|
||||
}
|
||||
public override string GetTranslationColumnName(string entityName, string propertyName)
|
||||
{
|
||||
Check.ArgumentNullException(entityName, string.Format(ErrorMessage.ObjNotExist, "Table Name"));
|
||||
Check.ArgumentNullException(propertyName, string.Format(ErrorMessage.ObjNotExist, "Column Name"));
|
||||
var context = this.Context;
|
||||
var mappingInfo = context
|
||||
.MappingColumns
|
||||
.FirstOrDefault(it =>
|
||||
it.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase) &&
|
||||
it.PropertyName.Equals(propertyName, StringComparison.CurrentCultureIgnoreCase));
|
||||
return (mappingInfo == null ? "`" + propertyName + "`" : "`" + mappingInfo.DbColumnName + "`");
|
||||
}
|
||||
|
||||
public override string GetTranslationColumnName(string propertyName)
|
||||
{
|
||||
if (propertyName.Contains("`")) return propertyName;
|
||||
else
|
||||
return "`" + propertyName + "`";
|
||||
}
|
||||
|
||||
public override string GetNoTranslationColumnName(string name)
|
||||
{
|
||||
if (!name.Contains("`")) return name;
|
||||
return name == null ? string.Empty : Regex.Match(name, @"\`(.*?)\`").Groups[1].Value;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class MySqlDeleteBuilder : DeleteBuilder
|
||||
{
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,158 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class MySqlExpressionContext : ExpressionContext, ILambdaExpressions
|
||||
{
|
||||
public SqlSugarClient Context { get; set; }
|
||||
public MySqlExpressionContext()
|
||||
{
|
||||
base.DbMehtods = new MySqlMethod();
|
||||
}
|
||||
public override string GetTranslationTableName(string entityName, bool isMapping = true)
|
||||
{
|
||||
Check.ArgumentNullException(entityName, string.Format(ErrorMessage.ObjNotExist, "Table Name"));
|
||||
if (IsTranslationText(entityName)) return entityName;
|
||||
if (isMapping && this.MappingTables.IsValuable())
|
||||
{
|
||||
if (entityName.Contains("."))
|
||||
{
|
||||
var columnInfo = entityName.Split('.');
|
||||
var mappingInfo = this.MappingTables.FirstOrDefault(it => it.EntityName.Equals(columnInfo.Last(), StringComparison.CurrentCultureIgnoreCase));
|
||||
if (mappingInfo != null)
|
||||
{
|
||||
columnInfo[columnInfo.Length - 1] = mappingInfo.EntityName;
|
||||
}
|
||||
return string.Join(".", columnInfo.Select(it => GetTranslationText(it)));
|
||||
}
|
||||
else
|
||||
{
|
||||
var mappingInfo = this.MappingTables.FirstOrDefault(it => it.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase));
|
||||
return "`" + (mappingInfo == null ? entityName : mappingInfo.EntityName) + "`";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (entityName.Contains("."))
|
||||
{
|
||||
return string.Join(".", entityName.Split('.').Select(it => GetTranslationText(it)));
|
||||
}
|
||||
else
|
||||
{
|
||||
return GetTranslationText(entityName);
|
||||
}
|
||||
}
|
||||
}
|
||||
public override bool IsTranslationText(string name)
|
||||
{
|
||||
return name.Contains("`") && name.Contains("`");
|
||||
}
|
||||
public override string GetTranslationText(string name)
|
||||
{
|
||||
return "`" + name + "`";
|
||||
}
|
||||
}
|
||||
public class MySqlMethod : DefaultDbMethod, IDbMethods
|
||||
{
|
||||
|
||||
public override string Contains(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
return string.Format(" ({0} like concat('%',{1},'%')) ", parameter.MemberName, parameter2.MemberName );
|
||||
}
|
||||
|
||||
public override string StartsWith(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
return string.Format(" ({0} like concat({1},'%')) ", parameter.MemberName, parameter2.MemberName);
|
||||
}
|
||||
|
||||
public override string EndsWith(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
return string.Format(" ({0} like concat('%',{1}))", parameter.MemberName,parameter2.MemberName);
|
||||
}
|
||||
|
||||
public override string DateIsSameDay(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
return string.Format(" (TIMESTAMPDIFF(day,{0},{1})=0) ", parameter.MemberName, parameter2.MemberName); ;
|
||||
}
|
||||
|
||||
public override string DateIsSameByType(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
var parameter3 = model.Args[2];
|
||||
return string.Format(" (TIMESTAMPDIFF({2},{0},{1})=0) ", parameter.MemberName, parameter2.MemberName, parameter3.MemberName);
|
||||
}
|
||||
|
||||
public override string DateAddByType(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
var parameter3 = model.Args[2];
|
||||
return string.Format(" (DATE_ADD({1} INTERVAL {2} {0})) ", parameter.MemberName, parameter2.MemberName, parameter3.MemberName);
|
||||
}
|
||||
|
||||
public override string DateAddDay(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
return string.Format(" (DATE_ADD({1} INTERVAL {0} day)) ", parameter.MemberName, parameter2.MemberName);
|
||||
}
|
||||
|
||||
public override string ToInt32(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS SIGNED)", parameter.MemberName);
|
||||
}
|
||||
|
||||
public override string ToInt64(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS SIGNED)", parameter.MemberName);
|
||||
}
|
||||
|
||||
public override string ToString(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS CHAR)", parameter.MemberName);
|
||||
}
|
||||
|
||||
public override string ToGuid(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS CHAR)", parameter.MemberName);
|
||||
}
|
||||
|
||||
public override string ToDouble(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS DECIMAL(18,4))", parameter.MemberName);
|
||||
}
|
||||
|
||||
public override string ToBool(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS SIGNED)", parameter.MemberName);
|
||||
}
|
||||
|
||||
public override string ToDecimal(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS DECIMAL(18,4))", parameter.MemberName);
|
||||
}
|
||||
|
||||
public override string Length(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" LENGTH({0})", parameter.MemberName);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class MySqlInsertBuilder : InsertBuilder
|
||||
{
|
||||
public override string SqlTemplate
|
||||
{
|
||||
get
|
||||
{
|
||||
if (IsReturnIdentity)
|
||||
{
|
||||
return @"INSERT INTO {0}
|
||||
({1})
|
||||
VALUES
|
||||
({2}) ;SELECT LAST_INSERT_ID();";
|
||||
}
|
||||
else
|
||||
{
|
||||
return @"INSERT INTO {0}
|
||||
({1})
|
||||
VALUES
|
||||
({2}) ;";
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,86 @@
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
public partial class MySqlQueryBuilder : QueryBuilder
|
||||
{
|
||||
#region Sql Template
|
||||
public override string PageTempalte
|
||||
{
|
||||
get
|
||||
{
|
||||
/*
|
||||
SELECT * FROM TABLE WHERE CONDITION ORDER BY ID DESC LIMIT 0,10
|
||||
*/
|
||||
var template = "SELECT {0} FROM {1} {2} {3} {4} LIMIT {5},{6}";
|
||||
return template;
|
||||
}
|
||||
}
|
||||
public override string DefaultOrderByTemplate
|
||||
{
|
||||
get
|
||||
{
|
||||
return "ORDER BY NOW() ";
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Common Methods
|
||||
|
||||
public override string ToSqlString()
|
||||
{
|
||||
sql = new StringBuilder();
|
||||
sql.AppendFormat(SqlTemplate, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, (Skip != null || Take != null) ? null : GetOrderByString);
|
||||
if (IsCount) { return sql.ToString(); }
|
||||
if (Skip != null && Take == null)
|
||||
{
|
||||
if (this.OrderByValue == "ORDER BY ") this.OrderByValue += GetSelectValue.Split(',')[0];
|
||||
return string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, (Skip != null || Take != null) ? null : GetOrderByString, Skip.ObjToInt() + 1, long.MaxValue);
|
||||
}
|
||||
else if (Skip == null && Take != null)
|
||||
{
|
||||
if (this.OrderByValue == "ORDER BY ") this.OrderByValue += GetSelectValue.Split(',')[0];
|
||||
return string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, GetOrderByString, 1, Take.ObjToInt());
|
||||
}
|
||||
else if (Skip != null && Take != null)
|
||||
{
|
||||
if (this.OrderByValue == "ORDER BY ") this.OrderByValue += GetSelectValue.Split(',')[0];
|
||||
return string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, GetOrderByString, Skip.ObjToInt() > 0 ? Skip.ObjToInt() + 1 : 0, Take);
|
||||
}
|
||||
else
|
||||
{
|
||||
return sql.ToString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Get SQL Partial
|
||||
public override string GetSelectValue
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.IsCount) return "COUNT(1) AS `Count` ";
|
||||
string reval = string.Empty;
|
||||
if (this.SelectValue == null || this.SelectValue is string)
|
||||
{
|
||||
reval = GetSelectValueByString();
|
||||
}
|
||||
else
|
||||
{
|
||||
reval = GetSelectValueByExpression();
|
||||
}
|
||||
if (this.SelectType == ResolveExpressType.SelectMultiple)
|
||||
{
|
||||
this.SelectCacheKey = this.SelectCacheKey + string.Join("-", this.JoinQueryInfos.Select(it => it.TableName));
|
||||
}
|
||||
return reval;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -0,0 +1,91 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class MySqlUpdateBuilder : UpdateBuilder
|
||||
{
|
||||
public override string SqlTemplateBatch
|
||||
{
|
||||
get
|
||||
{
|
||||
return @"UPDATE {1} S {2} INNER JOIN ${{0}} SET {0} ";
|
||||
}
|
||||
}
|
||||
public override string SqlTemplateJoin
|
||||
{
|
||||
get
|
||||
{
|
||||
return @" (
|
||||
{0}
|
||||
|
||||
) T ON {1}
|
||||
";
|
||||
}
|
||||
}
|
||||
protected override string TomultipleSqlString(List<IGrouping<int, DbColumnInfo>> groupList)
|
||||
{
|
||||
Check.Exception(PrimaryKeys == null || PrimaryKeys.Count == 0, " Update List<T> need Primary key");
|
||||
int pageSize = 200;
|
||||
int pageIndex = 1;
|
||||
int totalRecord = groupList.Count;
|
||||
int pageCount = (totalRecord + pageSize - 1) / pageSize;
|
||||
StringBuilder batchUpdateSql = new StringBuilder();
|
||||
while (pageCount >= pageIndex)
|
||||
{
|
||||
StringBuilder updateTable = new StringBuilder();
|
||||
string setValues = string.Join(",", groupList.First().Where(it => it.IsPrimarykey == false && (it.IsIdentity == false || (IsOffIdentity && it.IsIdentity))).Select(it =>
|
||||
{
|
||||
if (SetValues.IsValuable())
|
||||
{
|
||||
var setValue = SetValues.Where(sv => sv.Key == Builder.GetTranslationColumnName(it.DbColumnName));
|
||||
if (setValue != null && setValue.Any())
|
||||
{
|
||||
return setValue.First().Value;
|
||||
}
|
||||
}
|
||||
var result = string.Format("S.{0}=T.{0}", Builder.GetTranslationColumnName(it.DbColumnName));
|
||||
return result;
|
||||
}));
|
||||
batchUpdateSql.AppendFormat(SqlTemplateBatch.ToString(), setValues, GetTableNameStringNoWith, TableWithString);
|
||||
int i = 0;
|
||||
foreach (var columns in groupList.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList())
|
||||
{
|
||||
var isFirst = i == 0;
|
||||
if (!isFirst)
|
||||
{
|
||||
updateTable.Append(SqlTemplateBatchUnion);
|
||||
}
|
||||
updateTable.Append("\r\n SELECT " + string.Join(",", columns.Select(it => string.Format(SqlTemplateBatchSelect, FormatValue(it.Value), it.DbColumnName))));
|
||||
++i;
|
||||
}
|
||||
pageIndex++;
|
||||
updateTable.Append("\r\n");
|
||||
string whereString = null;
|
||||
if (this.WhereValues.IsValuable())
|
||||
{
|
||||
foreach (var item in WhereValues)
|
||||
{
|
||||
var isFirst = whereString == null;
|
||||
whereString += (isFirst ? null : " AND ");
|
||||
whereString += item;
|
||||
}
|
||||
}
|
||||
else if (PrimaryKeys.IsValuable())
|
||||
{
|
||||
foreach (var item in PrimaryKeys)
|
||||
{
|
||||
var isFirst = whereString == null;
|
||||
whereString += (isFirst ? null : " AND ");
|
||||
whereString += string.Format("S.{0}=T.{0}", Builder.GetTranslationColumnName(item));
|
||||
}
|
||||
}
|
||||
var format= string.Format(SqlTemplateJoin, updateTable, whereString);
|
||||
batchUpdateSql.Replace("${0}",format);
|
||||
batchUpdateSql.Append(";");
|
||||
}
|
||||
return batchUpdateSql.ToString();
|
||||
}
|
||||
}
|
||||
}
|
@ -16,7 +16,11 @@ namespace SqlSugar
|
||||
var mappingInfo = context
|
||||
.MappingTables
|
||||
.FirstOrDefault(it => it.EntityName.Equals(name, StringComparison.CurrentCultureIgnoreCase));
|
||||
return "[" + (mappingInfo == null ? name : mappingInfo.DbTableName) + "]";
|
||||
name = (mappingInfo == null ? name : mappingInfo.DbTableName);
|
||||
if (name.Contains("["))
|
||||
return name;
|
||||
else
|
||||
return "[" + name + "]";
|
||||
}
|
||||
public override string GetTranslationColumnName(string entityName, string propertyName)
|
||||
{
|
||||
@ -33,11 +37,14 @@ namespace SqlSugar
|
||||
|
||||
public override string GetTranslationColumnName(string propertyName)
|
||||
{
|
||||
return "[" + propertyName + "]";
|
||||
if (propertyName.Contains("[")) return propertyName;
|
||||
else
|
||||
return "[" + propertyName + "]";
|
||||
}
|
||||
|
||||
public override string GetNoTranslationColumnName(string name)
|
||||
{
|
||||
if (!name.Contains("[")) return name;
|
||||
return name == null ? string.Empty : Regex.Match(name, @"\[(.*?)\]").Groups[1].Value;
|
||||
}
|
||||
}
|
||||
|
@ -83,6 +83,7 @@ namespace SqlSugar
|
||||
if (parameter.Value == null) parameter.Value = DBNull.Value;
|
||||
var sqlParameter = new SqlParameter();
|
||||
sqlParameter.ParameterName = parameter.ParameterName;
|
||||
//sqlParameter.UdtTypeName = parameter.UdtTypeName;
|
||||
sqlParameter.Size = parameter.Size;
|
||||
sqlParameter.Value = parameter.Value;
|
||||
sqlParameter.DbType = parameter.DbType;
|
||||
|
@ -183,7 +183,7 @@ namespace SqlSugar
|
||||
this.CreateQueryable<T>(queryable);
|
||||
string shortName = string.Empty;
|
||||
List<SugarParameter> paramters =new List<SugarParameter>();
|
||||
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = this.GetJoinInfos(joinExpression,ref paramters, ref shortName, types);
|
||||
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = this.GetJoinInfos(queryable.SqlBuilder,joinExpression, ref paramters, ref shortName, types);
|
||||
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
|
||||
if (paramters != null) {
|
||||
queryable.SqlBuilder.QueryBuilder.Parameters.AddRange(paramters);
|
||||
@ -199,11 +199,11 @@ namespace SqlSugar
|
||||
#endregion
|
||||
|
||||
#region Private methods
|
||||
protected List<JoinQueryInfo> GetJoinInfos(Expression joinExpression,ref List<SugarParameter> parameters, ref string shortName, params Type[] entityTypeArray)
|
||||
protected List<JoinQueryInfo> GetJoinInfos(ISqlBuilder sqlBuilder,Expression joinExpression,ref List<SugarParameter> parameters, ref string shortName, params Type[] entityTypeArray)
|
||||
{
|
||||
List<JoinQueryInfo> result = new List<JoinQueryInfo>();
|
||||
var lambdaParameters = ((LambdaExpression)joinExpression).Parameters.ToList();
|
||||
ExpressionContext expressionContext = new ExpressionContext();
|
||||
ILambdaExpressions expressionContext = sqlBuilder.QueryBuilder.LambdaExpressions;
|
||||
expressionContext.MappingColumns = this.Context.MappingColumns;
|
||||
expressionContext.MappingTables = this.Context.MappingTables;
|
||||
expressionContext.Resolve(joinExpression, ResolveExpressType.Join);
|
||||
@ -238,6 +238,7 @@ namespace SqlSugar
|
||||
joinInfo.JoinIndex = i;
|
||||
result.Add((joinInfo));
|
||||
}
|
||||
expressionContext.Clear();
|
||||
return result;
|
||||
}
|
||||
protected Dictionary<string,string> GetEasyJoinInfo(Expression joinExpression, ref string shortName, ISqlBuilder builder, params Type[] entityTypeArray)
|
||||
|
@ -1,7 +1,8 @@
|
||||
{
|
||||
{
|
||||
"version": "1.0.0-*",
|
||||
|
||||
"dependencies": {
|
||||
"MySql.Data": "7.0.7-m61",
|
||||
"NETStandard.Library": "1.6.0",
|
||||
"Newtonsoft.Json": "9.0.1",
|
||||
"System.Collections.NonGeneric": "4.0.1",
|
||||
|
Loading…
Reference in New Issue
Block a user