Update Core MySql

This commit is contained in:
sunkaixuan 2017-06-26 01:19:49 +08:00
parent b552079459
commit e732b58895
43 changed files with 1421 additions and 155 deletions

View File

@ -2,7 +2,7 @@
<package > <package >
<metadata> <metadata>
<id>sqlSugar</id> <id>sqlSugar</id>
<version>4.0.6</version> <version>4.1</version>
<title>SqlSugar SqlServer ORM</title> <title>SqlSugar SqlServer ORM</title>
<authors>sun kaixuan</authors> <authors>sun kaixuan</authors>
<owners>landa</owners> <owners>landa</owners>

View File

@ -14,6 +14,8 @@ Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "SqlServerTest", "src\SqlSer
EndProject EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "SqlSugar", "src\SqlSugar\SqlSugar.xproj", "{1C022A5C-4E4D-4026-A8A3-F659B9740A1A}" Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "SqlSugar", "src\SqlSugar\SqlSugar.xproj", "{1C022A5C-4E4D-4026-A8A3-F659B9740A1A}"
EndProject EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MySqlTest", "src\MySqlTest\MySqlTest.xproj", "{B20C63AD-3E90-4287-BF69-4417F377DFDC}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU 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}.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.ActiveCfg = Release|Any CPU
{1C022A5C-4E4D-4026-A8A3-F659B9740A1A}.Release|Any CPU.Build.0 = 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 EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -35,5 +41,6 @@ Global
GlobalSection(NestedProjects) = preSolution GlobalSection(NestedProjects) = preSolution
{298028E0-EB86-4C7E-9B23-69DE5997F405} = {0C3ED2E9-ECF1-4562-8F9E-8F1FEC308647} {298028E0-EB86-4C7E-9B23-69DE5997F405} = {0C3ED2E9-ECF1-4562-8F9E-8F1FEC308647}
{1C022A5C-4E4D-4026-A8A3-F659B9740A1A} = {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 EndGlobalSection
EndGlobal EndGlobal

View 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>

View 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)
{
}
}
}

View File

@ -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")]

View 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"
}
}
}

View File

@ -2,7 +2,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Runtime.Loader;
using System.Text; using System.Text;
namespace SqlSugar namespace SqlSugar
{ {
@ -15,13 +14,13 @@ namespace SqlSugar
#endregion #endregion
#region Public methods #region Public methods
public ICodeFirst BackupTable(int maxBackupDataRows = int.MaxValue) public virtual ICodeFirst BackupTable(int maxBackupDataRows = int.MaxValue)
{ {
this.IsBackupTable = true; this.IsBackupTable = true;
this.MaxBackupDataRows = maxBackupDataRows; this.MaxBackupDataRows = maxBackupDataRows;
return this; return this;
} }
public void InitTables(Type entityType) public virtual void InitTables(Type entityType)
{ {
if (!this.Context.DbMaintenance.IsAnySystemTablePermissions()) if (!this.Context.DbMaintenance.IsAnySystemTablePermissions())
{ {
@ -34,7 +33,7 @@ namespace SqlSugar
}); });
Check.Exception(!executeResult.IsSuccess, executeResult.Messaage); Check.Exception(!executeResult.IsSuccess, executeResult.Messaage);
} }
public void InitTables(Type[] entityTypes) public virtual void InitTables(Type[] entityTypes)
{ {
if (entityTypes.IsValuable()) 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); InitTables(types);
} }
public void InitTables(params string[] entitiesNamespaces) public virtual void InitTables(params string[] entitiesNamespaces)
{ {
if (entitiesNamespaces.IsValuable()) if (entitiesNamespaces.IsValuable())
{ {
@ -62,7 +61,7 @@ namespace SqlSugar
#endregion #endregion
#region Core Logic #region Core Logic
private void Execute(Type entityType) protected virtual void Execute(Type entityType)
{ {
var entityInfo = this.Context.EntityProvider.GetEntityInfo(entityType); var entityInfo = this.Context.EntityProvider.GetEntityInfo(entityType);
var tableName = GetTableName(entityInfo); var tableName = GetTableName(entityInfo);
@ -72,14 +71,14 @@ namespace SqlSugar
else else
NoExistLogic(entityInfo); NoExistLogic(entityInfo);
} }
private void NoExistLogic(EntityInfo entityInfo) public virtual void NoExistLogic(EntityInfo entityInfo)
{ {
var tableName = GetTableName(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"); 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>(); List<DbColumnInfo> columns = new List<DbColumnInfo>();
if (entityInfo.Columns.IsValuable()) 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); DbColumnInfo dbColumnInfo = EntityColumnToDbColumn(entityInfo, tableName, item);
columns.Add(dbColumnInfo); columns.Add(dbColumnInfo);
@ -92,7 +91,7 @@ namespace SqlSugar
this.Context.DbMaintenance.AddPrimaryKey(tableName, item.DbColumnName); this.Context.DbMaintenance.AddPrimaryKey(tableName, item.DbColumnName);
} }
} }
private void ExistLogic(EntityInfo entityInfo) public virtual void ExistLogic(EntityInfo entityInfo)
{ {
if (entityInfo.Columns.IsValuable()) if (entityInfo.Columns.IsValuable())
{ {
@ -100,6 +99,7 @@ namespace SqlSugar
var tableName = GetTableName(entityInfo); var tableName = GetTableName(entityInfo);
var dbColumns = this.Context.DbMaintenance.GetColumnInfosByTableName(tableName); var dbColumns = this.Context.DbMaintenance.GetColumnInfosByTableName(tableName);
ConvertColumns(dbColumns);
var entityColumns = entityInfo.Columns.Where(it => it.IsIgnore == false).ToList(); var entityColumns = entityInfo.Columns.Where(it => it.IsIgnore == false).ToList();
var dropColumns = dbColumns var dropColumns = dbColumns
.Where(dc => !entityColumns.Any(ec => dc.DbColumnName.Equals(ec.OldDbColumnName, StringComparison.CurrentCultureIgnoreCase))) .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.OldDbColumnName, StringComparison.CurrentCultureIgnoreCase)))
.Where(ec => .Where(ec =>
dbColumns.Any(dc => dc.DbColumnName.Equals(ec.DbColumnName) 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 || ec.IsNullable != dc.IsNullable ||
IsSamgeType(ec, dc)))).ToList(); IsSamgeType(ec, dc)))).ToList();
var renameColumns = entityColumns var renameColumns = entityColumns
@ -163,13 +163,7 @@ namespace SqlSugar
} }
else if (pkDiff || idEntityDiff) else if (pkDiff || idEntityDiff)
{ {
string constraintName = string.Format("PK_{0}_{1}", tableName, item.DbColumnName); ChangeKey(entityInfo, tableName, item);
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);
} }
} }
if (isChange && IsBackupTable) 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 #endregion
#region Helper methods #region Helper methods
public string GetCreateTableString(EntityInfo entityInfo) public virtual string GetCreateTableString(EntityInfo entityInfo)
{ {
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
var tableName = GetTableName(entityInfo); var tableName = GetTableName(entityInfo);
return result.ToString(); return result.ToString();
} }
public string GetCreateColumnsString(EntityInfo entityInfo) public virtual string GetCreateColumnsString(EntityInfo entityInfo)
{ {
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
var tableName = GetTableName(entityInfo); var tableName = GetTableName(entityInfo);
return result.ToString(); return result.ToString();
} }
private static string GetTableName(EntityInfo entityInfo) protected virtual string GetTableName(EntityInfo entityInfo)
{ {
return entityInfo.DbTableName == null ? entityInfo.EntityName : entityInfo.DbTableName; 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() var result = new DbColumnInfo()
{ {
DataType = this.Context.Ado.DbBind.GetDbTypeName(PubMethod.GetUnderType(item.PropertyInfo).Name),
TableId = entityInfo.Columns.IndexOf(item), TableId = entityInfo.Columns.IndexOf(item),
DbColumnName = item.DbColumnName.IsValuable() ? item.DbColumnName : item.PropertyName, DbColumnName = item.DbColumnName.IsValuable() ? item.DbColumnName : item.PropertyName,
IsPrimarykey = item.IsPrimarykey, IsPrimarykey = item.IsPrimarykey,
@ -212,14 +222,31 @@ namespace SqlSugar
ColumnDescription = item.ColumnDescription, ColumnDescription = item.ColumnDescription,
Length = item.Length 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; 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; var dataType = dc.DataType;
return propType != dataType; return properyTypeName != dataType;
} }
#endregion #endregion
} }

View File

@ -15,7 +15,7 @@ namespace SqlSugar
#endregion #endregion
#region Public methods #region Public methods
public string GetDbTypeName(string csharpTypeName) public virtual string GetDbTypeName(string csharpTypeName)
{ {
if (csharpTypeName == PubConst.ByteArrayType.Name) if (csharpTypeName == PubConst.ByteArrayType.Name)
{ {

View File

@ -36,6 +36,8 @@ namespace SqlSugar
private static readonly MethodInfo getInt32 = typeof(IDataRecord).GetMethod("GetInt32", new Type[] { typeof(int) }); 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 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 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 getEnum = typeof(IDataRecordExtensions).GetMethod("GetEnum");
private static readonly MethodInfo getConvertString = typeof(IDataRecordExtensions).GetMethod("GetConvertString"); private static readonly MethodInfo getConvertString = typeof(IDataRecordExtensions).GetMethod("GetConvertString");
private static readonly MethodInfo getConvertFloat = typeof(IDataRecordExtensions).GetMethod("GetConvertFloat"); private static readonly MethodInfo getConvertFloat = typeof(IDataRecordExtensions).GetMethod("GetConvertFloat");
@ -178,6 +180,9 @@ namespace SqlSugar
case CSharpDataType.@string: case CSharpDataType.@string:
CheckType(bind.StringThrow, bindProperyTypeName, validPropertyName, propertyName); CheckType(bind.StringThrow, bindProperyTypeName, validPropertyName, propertyName);
method = getString; method = getString;
if (bindProperyTypeName == "guid") {
method = getConvertStringGuid ;
}
break; break;
case CSharpDataType.DateTime: case CSharpDataType.DateTime:
CheckType(bind.DateThrow, bindProperyTypeName, validPropertyName, propertyName); CheckType(bind.DateThrow, bindProperyTypeName, validPropertyName, propertyName);
@ -198,7 +203,7 @@ namespace SqlSugar
case CSharpDataType.Guid: case CSharpDataType.Guid:
CheckType(bind.GuidThrow, bindProperyTypeName, validPropertyName, propertyName); CheckType(bind.GuidThrow, bindProperyTypeName, validPropertyName, propertyName);
if (bindProperyTypeName == "guid") if (bindProperyTypeName == "guid")
method = isNullableType ? getConvertGuid : getGuid; method = isNullableType ? getConvertStringGuid : getStringGuid;
break; break;
case CSharpDataType.@byte: case CSharpDataType.@byte:
method = isNullableType ? getConvertByte : getByte; method = isNullableType ? getConvertByte : getByte;
@ -208,10 +213,11 @@ namespace SqlSugar
break; break;
case CSharpDataType.@short: case CSharpDataType.@short:
CheckType(bind.ShortThrow, bindProperyTypeName, validPropertyName, propertyName); CheckType(bind.ShortThrow, bindProperyTypeName, validPropertyName, propertyName);
if (bindProperyTypeName == "int16" && bindProperyTypeName == "short") if (bindProperyTypeName == "int16" || bindProperyTypeName == "short")
method = isNullableType ? getConvertInt16 : getInt16; method = isNullableType ? getConvertInt16 : getInt16;
break; break;
case CSharpDataType.@long: case CSharpDataType.@long:
if (bindProperyTypeName == "int64" || bindProperyTypeName == "long")
method = isNullableType ? getConvetInt64 : getInt64; method = isNullableType ? getConvetInt64 : getInt64;
break; break;
default: default:

View File

@ -7,6 +7,23 @@ namespace SqlSugar
{ {
public static partial class IDataRecordExtensions 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) public static bool? GetConvertBoolean(this IDataRecord dr, int i)
{ {
if (dr.IsDBNull(i)) if (dr.IsDBNull(i))

View File

@ -31,12 +31,12 @@ namespace SqlSugar
public virtual List<DbColumnInfo> GetColumnInfosByTableName(string tableName) public virtual List<DbColumnInfo> GetColumnInfosByTableName(string tableName)
{ {
if (string.IsNullOrEmpty(tableName)) return new List<DbColumnInfo>(); 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)); return GetListOrCache<DbColumnInfo>(key, string.Format(this.GetColumnInfosByTableNameSql, tableName));
} }
public virtual List<string> GetIsIdentities(string 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, return this.Context.RewritableMethods.GetCacheInstance<List<string>>().Func(cacheKey,
(cm, key) => (cm, key) =>
{ {
@ -50,7 +50,7 @@ namespace SqlSugar
} }
public virtual List<string> GetPrimaries(string tableName) 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, return this.Context.RewritableMethods.GetCacheInstance<List<string>>().Func(cacheKey,
(cm, key) => (cm, key) =>
{ {
@ -67,12 +67,15 @@ namespace SqlSugar
#region Check #region Check
public virtual bool IsAnyTable(string tableName) public virtual bool IsAnyTable(string tableName)
{ {
tableName = this.SqlBuilder.GetNoTranslationColumnName(tableName);
var tables = GetTableInfoList(); var tables = GetTableInfoList();
if (tables == null) return false; if (tables == null) return false;
else return tables.Any(it => it.Name.Equals(tableName, StringComparison.CurrentCultureIgnoreCase)); else return tables.Any(it => it.Name.Equals(tableName, StringComparison.CurrentCultureIgnoreCase));
} }
public virtual bool IsAnyColumn(string tableName, string columnName) public virtual bool IsAnyColumn(string tableName, string columnName)
{ {
columnName = this.SqlBuilder.GetTranslationColumnName(columnName);
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
var isAny = IsAnyTable(tableName); var isAny = IsAnyTable(tableName);
Check.Exception(!isAny, string.Format("Table {0} does not exist", tableName)); Check.Exception(!isAny, string.Format("Table {0} does not exist", tableName));
var columns = GetColumnInfosByTableName(tableName); var columns = GetColumnInfosByTableName(tableName);
@ -81,6 +84,7 @@ namespace SqlSugar
} }
public virtual bool IsPrimaryKey(string tableName, string columnName) public virtual bool IsPrimaryKey(string tableName, string columnName)
{ {
columnName = this.SqlBuilder.GetTranslationColumnName(columnName);
var isAny = IsAnyTable(tableName); var isAny = IsAnyTable(tableName);
Check.Exception(!isAny, string.Format("Table {0} does not exist", tableName)); Check.Exception(!isAny, string.Format("Table {0} does not exist", tableName));
var columns = GetColumnInfosByTableName(tableName); var columns = GetColumnInfosByTableName(tableName);
@ -89,6 +93,7 @@ namespace SqlSugar
} }
public virtual bool IsIdentity(string tableName, string columnName) public virtual bool IsIdentity(string tableName, string columnName)
{ {
columnName = this.SqlBuilder.GetTranslationColumnName(columnName);
var isAny = IsAnyTable(tableName); var isAny = IsAnyTable(tableName);
Check.Exception(!isAny, string.Format("Table {0} does not exist", tableName)); Check.Exception(!isAny, string.Format("Table {0} does not exist", tableName));
var columns = GetColumnInfosByTableName(tableName); var columns = GetColumnInfosByTableName(tableName);
@ -117,46 +122,56 @@ namespace SqlSugar
#region DDL #region DDL
public virtual bool AddPrimaryKey(string tableName, string columnName) 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); this.Context.Ado.ExecuteCommand(sql);
return true; return true;
} }
public virtual bool AddColumn(string tableName, DbColumnInfo columnInfo) public virtual bool AddColumn(string tableName, DbColumnInfo columnInfo)
{ {
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
string sql = GetAddColumnSql(tableName, columnInfo); string sql = GetAddColumnSql(tableName, columnInfo);
this.Context.Ado.ExecuteCommand(sql); this.Context.Ado.ExecuteCommand(sql);
return true; return true;
} }
public virtual bool UpdateColumn(string tableName, DbColumnInfo column) public virtual bool UpdateColumn(string tableName, DbColumnInfo column)
{ {
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
string sql = GetUpdateColumnSql(tableName, column); string sql = GetUpdateColumnSql(tableName, column);
this.Context.Ado.ExecuteCommand(sql); this.Context.Ado.ExecuteCommand(sql);
return true; return true;
} }
public virtual bool CreateTable(string tableName, List<DbColumnInfo> columns) public virtual bool CreateTable(string tableName, List<DbColumnInfo> columns)
{ {
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
string sql = GetCreateTableSql(tableName, columns); string sql = GetCreateTableSql(tableName, columns);
this.Context.Ado.ExecuteCommand(sql); this.Context.Ado.ExecuteCommand(sql);
return true; return true;
} }
public virtual bool DropTable(string tableName) public virtual bool DropTable(string tableName)
{ {
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
this.Context.Ado.ExecuteCommand(string.Format(this.DropTableSql,tableName)); this.Context.Ado.ExecuteCommand(string.Format(this.DropTableSql,tableName));
return true; return true;
} }
public virtual bool DropColumn(string tableName, string columnName) 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)); this.Context.Ado.ExecuteCommand(string.Format(this.DropColumnToTableSql, tableName, columnName));
return true; return true;
} }
public virtual bool DropConstraint(string tableName, string constraintName) public virtual bool DropConstraint(string tableName, string constraintName)
{ {
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
string sql = string.Format(this.DropConstraintSql, tableName, constraintName); string sql = string.Format(this.DropConstraintSql, tableName, constraintName);
this.Context.Ado.ExecuteCommand(sql); this.Context.Ado.ExecuteCommand(sql);
return true; return true;
} }
public virtual bool TruncateTable(string tableName) public virtual bool TruncateTable(string tableName)
{ {
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
this.Context.Ado.ExecuteCommand(string.Format(this.TruncateTableSql, tableName)); this.Context.Ado.ExecuteCommand(string.Format(this.TruncateTableSql, tableName));
return true; return true;
} }
@ -172,12 +187,17 @@ namespace SqlSugar
} }
public virtual bool BackupTable(string oldTableName, string newTableName, int maxBackupDataRows = int.MaxValue) public virtual bool BackupTable(string oldTableName, string newTableName, int maxBackupDataRows = int.MaxValue)
{ {
oldTableName = this.SqlBuilder.GetTranslationTableName(oldTableName);
newTableName = this.SqlBuilder.GetTranslationTableName(newTableName);
string sql = string.Format(this.BackupTableSql, maxBackupDataRows,newTableName , oldTableName); string sql = string.Format(this.BackupTableSql, maxBackupDataRows,newTableName , oldTableName);
this.Context.Ado.ExecuteCommand(sql); this.Context.Ado.ExecuteCommand(sql);
return true; return true;
} }
public virtual bool RenameColumn(string tableName, string oldColumnName, string newColumnName) 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); string sql = string.Format(this.RenameColumnSql, tableName, oldColumnName, newColumnName);
this.Context.Ado.ExecuteCommand(sql); this.Context.Ado.ExecuteCommand(sql);
return true; return true;
@ -201,13 +221,13 @@ namespace SqlSugar
return reval; 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>(); List<string> columnArray = new List<string>();
Check.Exception(columns.IsNullOrEmpty(), "No columns found "); Check.Exception(columns.IsNullOrEmpty(), "No columns found ");
foreach (var item in columns) foreach (var item in columns)
{ {
string columnName = item.DbColumnName; string columnName =this.SqlBuilder.GetTranslationTableName(item.DbColumnName);
string dataType = item.DataType; string dataType = item.DataType;
string dataSize = item.Length > 0 ? string.Format("({0})", item.Length) : null; string dataSize = item.Length > 0 ? string.Format("({0})", item.Length) : null;
string nullType = item.IsNullable ? this.CreateTableNull : CreateTableNotNull; string nullType = item.IsNullable ? this.CreateTableNull : CreateTableNotNull;
@ -216,12 +236,13 @@ namespace SqlSugar
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); 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; 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 dataType = columnInfo.DataType;
string dataSize = columnInfo.Length > 0 ? string.Format("({0})", columnInfo.Length) : null; string dataSize = columnInfo.Length > 0 ? string.Format("({0})", columnInfo.Length) : null;
string nullType = columnInfo.IsNullable ? this.CreateTableNull : CreateTableNotNull; 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); string result = string.Format(this.AddColumnToTableSql, tableName, columnName, dataType, dataSize, nullType, primaryKey, identity);
return result; 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 dataType = columnInfo.DataType;
string dataSize = columnInfo.Length > 0 ? string.Format("({0})", columnInfo.Length) : null; string dataSize = columnInfo.Length > 0 ? string.Format("({0})", columnInfo.Length) : null;
string nullType = columnInfo.IsNullable ? this.CreateTableNull : CreateTableNotNull; string nullType = columnInfo.IsNullable ? this.CreateTableNull : CreateTableNotNull;

View File

@ -8,7 +8,20 @@ namespace SqlSugar
public abstract partial class DbMaintenanceProvider : IDbMaintenance public abstract partial class DbMaintenanceProvider : IDbMaintenance
{ {
#region Context #region Context
private ISqlBuilder _SqlBuilder;
public SqlSugarClient Context { get; set; } 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 #endregion
#region DML #region DML

View File

@ -58,7 +58,7 @@ namespace SqlSugar
foreach (var deleteObj in deleteObjs) foreach (var deleteObj in deleteObjs)
{ {
var entityPropertyName = this.Context.EntityProvider.GetPropertyName<T>(primaryField); 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); var value = columnInfo.PropertyInfo.GetValue(deleteObj, null);
primaryKeyValues.Add(value); primaryKeyValues.Add(value);
} }
@ -171,6 +171,7 @@ namespace SqlSugar
public IDeleteable<T> With(string lockString) public IDeleteable<T> With(string lockString)
{ {
if (this.Context.CurrentConnectionConfig.DbType == DbType.SqlServer)
DeleteBuilder.TableWithString = lockString; DeleteBuilder.TableWithString = lockString;
return this; return this;
} }

View File

@ -92,6 +92,7 @@ namespace SqlSugar
public IInsertable<T> With(string lockString) public IInsertable<T> With(string lockString)
{ {
if (this.Context.CurrentConnectionConfig.DbType == DbType.SqlServer)
this.InsertBuilder.TableWithString = lockString; this.InsertBuilder.TableWithString = lockString;
return this; return this;
} }
@ -165,7 +166,8 @@ namespace SqlSugar
PropertyType = PubMethod.GetUnderType(column.PropertyInfo), PropertyType = PubMethod.GetUnderType(column.PropertyInfo),
TableId = i TableId = i
}; };
if (columnInfo.PropertyType.IsEnum()) { if (columnInfo.PropertyType.IsEnum())
{
columnInfo.Value = Convert.ToInt64(columnInfo.Value); columnInfo.Value = Convert.ToInt64(columnInfo.Value);
} }
insertItem.Add(columnInfo); insertItem.Add(columnInfo);

View File

@ -39,7 +39,7 @@ namespace SqlSugar
QueryBuilder.Clear(); QueryBuilder.Clear();
} }
public ISugarQueryable<T> AS<T2>(string tableName) public virtual ISugarQueryable<T> AS<T2>(string tableName)
{ {
var entityName = typeof(T2).Name; var entityName = typeof(T2).Name;
IsAs = true; IsAs = true;
@ -57,13 +57,13 @@ namespace SqlSugar
this.Context.MappingTables.Add(entityName, tableName); this.Context.MappingTables.Add(entityName, tableName);
return this; return this;
} }
public ISugarQueryable<T> With(string withString) public virtual ISugarQueryable<T> With(string withString)
{ {
QueryBuilder.TableWithString = withString; QueryBuilder.TableWithString = withString;
return this; return this;
} }
public ISugarQueryable<T> Filter(string FilterName, bool isDisabledGobalFilter = false) public virtual ISugarQueryable<T> Filter(string FilterName, bool isDisabledGobalFilter = false)
{ {
QueryBuilder.IsDisabledGobalFilter = isDisabledGobalFilter; QueryBuilder.IsDisabledGobalFilter = isDisabledGobalFilter;
if (this.Context.QueryFilter.GeFilterList.IsValuable() && FilterName.IsValuable()) if (this.Context.QueryFilter.GeFilterList.IsValuable() && FilterName.IsValuable())
@ -78,24 +78,24 @@ namespace SqlSugar
return this; return this;
} }
public ISugarQueryable<T> AddParameters(object parameters) public virtual ISugarQueryable<T> AddParameters(object parameters)
{ {
if (parameters != null) if (parameters != null)
QueryBuilder.Parameters.AddRange(Context.Ado.GetParameters(parameters)); QueryBuilder.Parameters.AddRange(Context.Ado.GetParameters(parameters));
return this; return this;
} }
public ISugarQueryable<T> AddParameters(SugarParameter[] parameters) public virtual ISugarQueryable<T> AddParameters(SugarParameter[] parameters)
{ {
QueryBuilder.Parameters.AddRange(parameters); QueryBuilder.Parameters.AddRange(parameters);
return this; return this;
} }
public ISugarQueryable<T> AddParameters(SugarParameter parameter) public virtual ISugarQueryable<T> AddParameters(SugarParameter parameter)
{ {
QueryBuilder.Parameters.Add(parameter); QueryBuilder.Parameters.Add(parameter);
return this; 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; QueryBuilder.JoinIndex = +1;
@ -116,12 +116,12 @@ namespace SqlSugar
this._Where(expression); this._Where(expression);
return this; 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); this.Where<T>(whereString, whereObj);
return this; 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; var whereValue = QueryBuilder.WhereInfos;
whereValue.Add(SqlBuilder.AppendWhereOrAnd(whereValue.Count == 0, whereString)); whereValue.Add(SqlBuilder.AppendWhereOrAnd(whereValue.Count == 0, whereString));
@ -130,12 +130,12 @@ namespace SqlSugar
return this; return this;
} }
public ISugarQueryable<T> Having(Expression<Func<T, bool>> expression) public virtual ISugarQueryable<T> Having(Expression<Func<T, bool>> expression)
{ {
this._Having(expression); this._Having(expression);
return this; 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); QueryBuilder.HavingInfos = SqlBuilder.AppendHaving(whereString);
@ -150,20 +150,20 @@ namespace SqlSugar
_Where(expression); _Where(expression);
return this; 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; if (!isWhere) return this;
this.Where<T>(whereString, whereObj); this.Where<T>(whereString, whereObj);
return this; return this;
} }
public T InSingle(object pkValue) public virtual T InSingle(object pkValue)
{ {
var list = In(pkValue).ToList(); var list = In(pkValue).ToList();
if (list == null) return default(T); if (list == null) return default(T);
else return list.SingleOrDefault(); 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) if (pkValues == null || pkValues.Length == 0)
{ {
@ -177,7 +177,7 @@ namespace SqlSugar
filed = shortName + filed; filed = shortName + filed;
return In(filed, pkValues); 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) if (inValues.Length == 1)
{ {
@ -217,14 +217,14 @@ namespace SqlSugar
} }
return this; 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 isSingle = QueryBuilder.IsSingle();
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple); var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
var fieldName = lamResult.GetResultString(); var fieldName = lamResult.GetResultString();
return In(fieldName, inValues); 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) if (pkValues == null || pkValues.Count == 0)
{ {
Where(SqlBuilder.SqlFalse); Where(SqlBuilder.SqlFalse);
@ -232,7 +232,7 @@ namespace SqlSugar
} }
return In(pkValues.ToArray()); 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) if (inValues == null || inValues.Count == 0)
{ {
Where(SqlBuilder.SqlFalse); Where(SqlBuilder.SqlFalse);
@ -240,7 +240,7 @@ namespace SqlSugar
} }
return In(InFieldName, inValues.ToArray()); 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) if (inValues == null || inValues.Count == 0)
{ {
Where(SqlBuilder.SqlFalse); Where(SqlBuilder.SqlFalse);
@ -248,7 +248,7 @@ namespace SqlSugar
} }
return In(expression, inValues.ToArray()); return In(expression, inValues.ToArray());
} }
public ISugarQueryable<T> OrderBy(string orderFileds) public virtual ISugarQueryable<T> OrderBy(string orderFileds)
{ {
var orderByValue = QueryBuilder.OrderByValue; var orderByValue = QueryBuilder.OrderByValue;
if (QueryBuilder.OrderByValue.IsNullOrEmpty()) if (QueryBuilder.OrderByValue.IsNullOrEmpty())
@ -258,18 +258,18 @@ namespace SqlSugar
QueryBuilder.OrderByValue += string.IsNullOrEmpty(orderByValue) ? orderFileds : ("," + orderFileds); QueryBuilder.OrderByValue += string.IsNullOrEmpty(orderByValue) ? orderFileds : ("," + orderFileds);
return this; 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); this._OrderBy(expression, type);
return this; return this;
} }
public ISugarQueryable<T> GroupBy(Expression<Func<T, object>> expression) public virtual ISugarQueryable<T> GroupBy(Expression<Func<T, object>> expression)
{ {
_GroupBy(expression); _GroupBy(expression);
return this; return this;
} }
public ISugarQueryable<T> GroupBy(string groupFileds) public virtual ISugarQueryable<T> GroupBy(string groupFileds)
{ {
var croupByValue = QueryBuilder.GroupByValue; var croupByValue = QueryBuilder.GroupByValue;
if (QueryBuilder.GroupByValue.IsNullOrEmpty()) if (QueryBuilder.GroupByValue.IsNullOrEmpty())
@ -280,14 +280,14 @@ namespace SqlSugar
return this; 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) if (QueryBuilder.Take == null)
QueryBuilder.Take = 0; QueryBuilder.Take = 0;
_PartitionBy(expression); _PartitionBy(expression);
return this; return this;
} }
public ISugarQueryable<T> PartitionBy(string groupFileds) public virtual ISugarQueryable<T> PartitionBy(string groupFileds)
{ {
var partitionByValue = QueryBuilder.PartitionByValue; var partitionByValue = QueryBuilder.PartitionByValue;
if (QueryBuilder.PartitionByValue.IsNullOrEmpty()) if (QueryBuilder.PartitionByValue.IsNullOrEmpty())
@ -298,18 +298,18 @@ namespace SqlSugar
return this; return this;
} }
public ISugarQueryable<T> Skip(int num) public virtual ISugarQueryable<T> Skip(int num)
{ {
QueryBuilder.Skip = num; QueryBuilder.Skip = num;
return this; return this;
} }
public ISugarQueryable<T> Take(int num) public virtual ISugarQueryable<T> Take(int num)
{ {
QueryBuilder.Take = num; QueryBuilder.Take = num;
return this; return this;
} }
public T Single() public virtual T Single()
{ {
if (QueryBuilder.OrderByValue.IsNullOrEmpty()) if (QueryBuilder.OrderByValue.IsNullOrEmpty())
{ {
@ -327,13 +327,13 @@ namespace SqlSugar
return default(T); return default(T);
} }
} }
public T Single(Expression<Func<T, bool>> expression) public virtual T Single(Expression<Func<T, bool>> expression)
{ {
_Where(expression); _Where(expression);
return Single(); return Single();
} }
public T First() public virtual T First()
{ {
if (QueryBuilder.OrderByValue.IsNullOrEmpty()) if (QueryBuilder.OrderByValue.IsNullOrEmpty())
{ {
@ -351,27 +351,27 @@ namespace SqlSugar
return default(T); return default(T);
} }
} }
public T First(Expression<Func<T, bool>> expression) public virtual T First(Expression<Func<T, bool>> expression)
{ {
_Where(expression); _Where(expression);
return First(); return First();
} }
public bool Any(Expression<Func<T, bool>> expression) public virtual bool Any(Expression<Func<T, bool>> expression)
{ {
_Where(expression); _Where(expression);
return Any(); return Any();
} }
public bool Any() public virtual bool Any()
{ {
return this.Count() > 0; 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); 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); var reval = InstanceFactory.GetQueryable<TResult>(this.Context.CurrentConnectionConfig);
reval.Context = this.Context; reval.Context = this.Context;
@ -379,13 +379,13 @@ namespace SqlSugar
QueryBuilder.SelectValue = selectValue; QueryBuilder.SelectValue = selectValue;
return reval; return reval;
} }
public ISugarQueryable<T> Select(string selectValue) public virtual ISugarQueryable<T> Select(string selectValue)
{ {
QueryBuilder.SelectValue = selectValue; QueryBuilder.SelectValue = selectValue;
return this; return this;
} }
public int Count() public virtual int Count()
{ {
QueryBuilder.IsCount = true; QueryBuilder.IsCount = true;
var sql = QueryBuilder.ToSqlString(); var sql = QueryBuilder.ToSqlString();
@ -395,76 +395,76 @@ namespace SqlSugar
return reval; return reval;
} }
public TResult Max<TResult>(string maxField) public virtual TResult Max<TResult>(string maxField)
{ {
this.Select(string.Format(QueryBuilder.MaxTemplate, maxField)); this.Select(string.Format(QueryBuilder.MaxTemplate, maxField));
var reval = this._ToList<TResult>().SingleOrDefault(); var reval = this._ToList<TResult>().SingleOrDefault();
return reval; 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 isSingle = QueryBuilder.IsSingle();
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple); var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
return Max<TResult>(lamResult.GetResultString()); 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)); this.Select(string.Format(QueryBuilder.MinTemplate, minField));
var reval = this._ToList<TResult>().SingleOrDefault(); var reval = this._ToList<TResult>().SingleOrDefault();
return reval; 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 isSingle = QueryBuilder.IsSingle();
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple); var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
return Min<TResult>(lamResult.GetResultString()); 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)); this.Select(string.Format(QueryBuilder.SumTemplate, sumField));
var reval = this._ToList<TResult>().SingleOrDefault(); var reval = this._ToList<TResult>().SingleOrDefault();
return reval; 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 isSingle = QueryBuilder.IsSingle();
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple); var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
return Sum<TResult>(lamResult.GetResultString()); 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)); this.Select(string.Format(QueryBuilder.AvgTemplate, avgField));
var reval = this._ToList<TResult>().SingleOrDefault(); var reval = this._ToList<TResult>().SingleOrDefault();
return reval; 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 isSingle = QueryBuilder.IsSingle();
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple); var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
return Avg<TResult>(lamResult.GetResultString()); return Avg<TResult>(lamResult.GetResultString());
} }
public string ToJson() public virtual string ToJson()
{ {
return this.Context.RewritableMethods.SerializeObject(this.ToList()); 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)); 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)); return this.Context.RewritableMethods.SerializeObject(this.ToPageList(pageIndex, pageSize, ref totalNumber));
} }
public DataTable ToDataTable() public virtual DataTable ToDataTable()
{ {
var sqlObj = this.ToSql(); var sqlObj = this.ToSql();
RestoreMapping(); RestoreMapping();
var result = this.Db.GetDataTable(sqlObj.Key, sqlObj.Value.ToArray()); var result = this.Db.GetDataTable(sqlObj.Key, sqlObj.Value.ToArray());
return result; return result;
} }
public DataTable ToDataTablePage(int pageIndex, int pageSize) public virtual DataTable ToDataTablePage(int pageIndex, int pageSize)
{ {
if (pageIndex == 0) if (pageIndex == 0)
pageIndex = 1; pageIndex = 1;
@ -472,17 +472,17 @@ namespace SqlSugar
QueryBuilder.Take = pageSize; QueryBuilder.Take = pageSize;
return ToDataTable(); 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(); totalNumber = this.Count();
return ToDataTablePage(pageIndex, pageSize); return ToDataTablePage(pageIndex, pageSize);
} }
public List<T> ToList() public virtual List<T> ToList()
{ {
return _ToList<T>(); return _ToList<T>();
} }
public List<T> ToPageList(int pageIndex, int pageSize) public virtual List<T> ToPageList(int pageIndex, int pageSize)
{ {
if (pageIndex == 0) if (pageIndex == 0)
pageIndex = 1; pageIndex = 1;
@ -490,13 +490,13 @@ namespace SqlSugar
QueryBuilder.Take = pageSize; QueryBuilder.Take = pageSize;
return ToList(); 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(); totalNumber = this.Count();
return ToPageList(pageIndex, pageSize); return ToPageList(pageIndex, pageSize);
} }
public KeyValuePair<string, List<SugarParameter>> ToSql() public virtual KeyValuePair<string, List<SugarParameter>> ToSql()
{ {
string sql = QueryBuilder.ToSqlString(); string sql = QueryBuilder.ToSqlString();
RestoreMapping(); RestoreMapping();

View File

@ -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"); Check.Exception(PrimaryKeys == null || PrimaryKeys.Count == 0, " Update List<T> need Primary key");
int pageSize = 200; int pageSize = 200;
@ -204,7 +204,7 @@ namespace SqlSugar
return batchUpdateSql.ToString(); 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 => string columnsString = string.Join(",", groupList.First().Where(it => it.IsPrimarykey == false && (it.IsIdentity == false || (IsOffIdentity && it.IsIdentity))).Select(it =>
{ {

View File

@ -135,6 +135,7 @@ namespace SqlSugar
} }
public IUpdateable<T> With(string lockString) public IUpdateable<T> With(string lockString)
{ {
if (this.Context.CurrentConnectionConfig.DbType == DbType.SqlServer)
this.UpdateBuilder.TableWithString = lockString; this.UpdateBuilder.TableWithString = lockString;
return this; return this;
} }

View File

@ -102,12 +102,20 @@ namespace SqlSugar
addValue = DateTime.MinValue; addValue = DateTime.MinValue;
} }
} }
else
{
if (item.PropertyType == PubConst.IntType)
{
addValue = Convert.ToInt32(addValue);
}
}
result.Add(name, addValue); result.Add(name, addValue);
} }
} }
} }
var stringValue = SerializeObject(result); var stringValue = SerializeObject(result);
if (stringValue.IsValuable()) { if (stringValue.IsValuable())
{
stringValue = stringValue.Replace(":{}", ":null"); stringValue = stringValue.Replace(":{}", ":null");
} }
reval.Add((T)DeserializeObject<T>(stringValue)); reval.Add((T)DeserializeObject<T>(stringValue));

View File

@ -161,7 +161,7 @@ namespace SqlSugar
public static object DynamicInvoke(MemberExpression expression) public static object DynamicInvoke(MemberExpression expression)
{ {
object value = Expression.Lambda(expression).Compile().DynamicInvoke(); 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(); value = Expression.Lambda(expression).Compile().DynamicInvoke();
} }

View File

@ -150,10 +150,10 @@ namespace SqlSugar
get; set; get; set;
} }
/// <summary> ///// <summary>
/// 如果类库是.NET 4.5请删除该属性 ///// 如果类库是.NET 4.5请删除该属性
/// If the SqlSugar library is.NET 4.5, delete the property ///// If the SqlSugar library is.NET 4.5, delete the property
/// </summary> ///// </summary>
//public override DataRowVersion SourceVersion //public override DataRowVersion SourceVersion
//{ //{
// get; set; // get; set;

View File

@ -83,21 +83,21 @@ namespace SqlSugar
return string.Format(" ({0} IN ({1})) ", value, inValueString); 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 parameter = model.Args[0];
var parameter2 = model.Args[1]; var parameter2 = model.Args[1];
return string.Format(" ({0} = {1}) ", parameter.MemberName, parameter2.MemberName); ; 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 parameter = model.Args[0];
var parameter2 = model.Args[1]; var parameter2 = model.Args[1];
return string.Format(" (DATEDIFF(day,{0},{1})=0) ", parameter.MemberName, parameter2.MemberName); ; 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 parameter = model.Args[0];
var parameter2 = model.Args[1]; 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); 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 parameter = model.Args[0];
var parameter2 = model.Args[1]; var parameter2 = model.Args[1];
@ -113,14 +113,14 @@ namespace SqlSugar
return string.Format(" (DATEADD({2},{1},{0})) ", parameter.MemberName, parameter2.MemberName, parameter3.MemberName); 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 parameter = model.Args[0];
var parameter2 = model.Args[1]; var parameter2 = model.Args[1];
return string.Format(" (DATEADD(day,{1},{0})) ", parameter.MemberName, parameter2.MemberName); 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 parameter = model.Args[0];
var parameter1 = model.Args[1]; 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); 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 parameter = model.Args[0];
var parameter2 = model.Args[1]; var parameter2 = model.Args[1];
return string.Format(" ({0} like {1}+'%') ", parameter.MemberName, parameter2.MemberName); 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 parameter = model.Args[0];
var parameter2 = model.Args[1]; var parameter2 = model.Args[1];
return string.Format(" ({0} like '%'+{1}) ", parameter.MemberName, parameter2.MemberName); 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 parameter = model.Args[0];
var parameter2 = model.Args[1]; var parameter2 = model.Args[1];
return string.Format(" ({0}({1})) ", parameter2.MemberName, parameter.MemberName); 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]; var parameter = model.Args[0];
return string.Format(" CAST({0} AS INT)", parameter.MemberName); 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]; var parameter = model.Args[0];
return string.Format(" CAST({0} AS BIGINT)", parameter.MemberName); 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]; var parameter = model.Args[0];
return string.Format(" CAST({0} AS NVARCHAR(MAX))", parameter.MemberName); 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]; var parameter = model.Args[0];
return string.Format(" CAST({0} AS UNIQUEIDENTIFIER)", parameter.MemberName); 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]; var parameter = model.Args[0];
return string.Format(" CAST({0} AS FLOAT)", parameter.MemberName); 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]; var parameter = model.Args[0];
return string.Format(" CAST({0} AS BIT)", parameter.MemberName); 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]; var parameter = model.Args[0];
return string.Format(" CAST({0} AS DATETIME)", parameter.MemberName); 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]; var parameter = model.Args[0];
return string.Format(" CAST({0} AS MONEY)", parameter.MemberName); 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 parameter = model.Args[0];
var parameter2 = model.Args[1]; 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); 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]; var parameter = model.Args[0];
return string.Format("LEN({0})", parameter.MemberName); return string.Format("LEN({0})", parameter.MemberName);
} }
public string Replace(MethodCallExpressionModel model) public virtual string Replace(MethodCallExpressionModel model)
{ {
var parameter = model.Args[0]; var parameter = model.Args[0];
var parameter2 = model.Args[1]; var parameter2 = model.Args[1];
@ -218,31 +218,31 @@ namespace SqlSugar
return string.Format("REPLACE({0},{1},{2})", parameter.MemberName, parameter2.MemberName, parameter3.MemberName); 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]; var parameter = model.Args[0];
return string.Format("SUM({0})", parameter.MemberName); return string.Format("SUM({0})", parameter.MemberName);
} }
public string AggregateAvg(MethodCallExpressionModel model) public virtual string AggregateAvg(MethodCallExpressionModel model)
{ {
var parameter = model.Args[0]; var parameter = model.Args[0];
return string.Format("AVG({0})", parameter.MemberName); return string.Format("AVG({0})", parameter.MemberName);
} }
public string AggregateMin(MethodCallExpressionModel model) public virtual string AggregateMin(MethodCallExpressionModel model)
{ {
var parameter = model.Args[0]; var parameter = model.Args[0];
return string.Format("MIN({0})", parameter.MemberName); return string.Format("MIN({0})", parameter.MemberName);
} }
public string AggregateMax(MethodCallExpressionModel model) public virtual string AggregateMax(MethodCallExpressionModel model)
{ {
var parameter = model.Args[0]; var parameter = model.Args[0];
return string.Format("MAX({0})", parameter.MemberName); return string.Format("MAX({0})", parameter.MemberName);
} }
public string AggregateCount(MethodCallExpressionModel model) public virtual string AggregateCount(MethodCallExpressionModel model)
{ {
var parameter = model.Args[0]; var parameter = model.Args[0];
return string.Format("COUNT({0})", parameter.MemberName); return string.Format("COUNT({0})", parameter.MemberName);

View File

@ -282,7 +282,7 @@ namespace SqlSugar
} }
else else
{ {
var asName = "[" + item.Type.Name + "." + property.Name + "]"; var asName = this.Context.GetTranslationText(item.Type.Name + "." + property.Name );
var columnName = property.Name; var columnName = property.Name;
if (Context.IsJoin) if (Context.IsJoin)
{ {

View File

@ -2,7 +2,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Runtime.Loader;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace SqlSugar namespace SqlSugar

View File

@ -1,4 +1,5 @@
using System; using MySql.Data.MySqlClient;
using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data.SqlClient; using System.Data.SqlClient;
@ -507,6 +508,133 @@ namespace SqlSugar
columns.Add(new DataColumn(name, dr.GetFieldType(i))); 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()) while (dr.Read())
{ {
DataRow daRow = new DataRow(); DataRow daRow = new DataRow();

View File

@ -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);
}
}
}

View File

@ -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"};
}
}
}
}

View File

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SqlSugar
{
public class MySqlDbFirst : DbFirstProvider
{
}
}

View File

@ -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
}
}

View File

@ -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";
}
}

View File

@ -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;
}
}
}

View File

@ -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>
{
}
}

View File

@ -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;
}
}
}

View File

@ -0,0 +1,7 @@
namespace SqlSugar
{
public class MySqlDeleteBuilder : DeleteBuilder
{
}
}

View File

@ -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);
}
}
}

View File

@ -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}) ;";
}
}
}
}
}

View File

@ -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
}
}

View File

@ -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();
}
}
}

View File

@ -16,7 +16,11 @@ namespace SqlSugar
var mappingInfo = context var mappingInfo = context
.MappingTables .MappingTables
.FirstOrDefault(it => it.EntityName.Equals(name, StringComparison.CurrentCultureIgnoreCase)); .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) public override string GetTranslationColumnName(string entityName, string propertyName)
{ {
@ -33,11 +37,14 @@ namespace SqlSugar
public override string GetTranslationColumnName(string propertyName) public override string GetTranslationColumnName(string propertyName)
{ {
if (propertyName.Contains("[")) return propertyName;
else
return "[" + propertyName + "]"; return "[" + propertyName + "]";
} }
public override string GetNoTranslationColumnName(string name) public override string GetNoTranslationColumnName(string name)
{ {
if (!name.Contains("[")) return name;
return name == null ? string.Empty : Regex.Match(name, @"\[(.*?)\]").Groups[1].Value; return name == null ? string.Empty : Regex.Match(name, @"\[(.*?)\]").Groups[1].Value;
} }
} }

View File

@ -83,6 +83,7 @@ namespace SqlSugar
if (parameter.Value == null) parameter.Value = DBNull.Value; if (parameter.Value == null) parameter.Value = DBNull.Value;
var sqlParameter = new SqlParameter(); var sqlParameter = new SqlParameter();
sqlParameter.ParameterName = parameter.ParameterName; sqlParameter.ParameterName = parameter.ParameterName;
//sqlParameter.UdtTypeName = parameter.UdtTypeName;
sqlParameter.Size = parameter.Size; sqlParameter.Size = parameter.Size;
sqlParameter.Value = parameter.Value; sqlParameter.Value = parameter.Value;
sqlParameter.DbType = parameter.DbType; sqlParameter.DbType = parameter.DbType;

View File

@ -183,7 +183,7 @@ namespace SqlSugar
this.CreateQueryable<T>(queryable); this.CreateQueryable<T>(queryable);
string shortName = string.Empty; string shortName = string.Empty;
List<SugarParameter> paramters =new List<SugarParameter>(); 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; queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
if (paramters != null) { if (paramters != null) {
queryable.SqlBuilder.QueryBuilder.Parameters.AddRange(paramters); queryable.SqlBuilder.QueryBuilder.Parameters.AddRange(paramters);
@ -199,11 +199,11 @@ namespace SqlSugar
#endregion #endregion
#region Private methods #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>(); List<JoinQueryInfo> result = new List<JoinQueryInfo>();
var lambdaParameters = ((LambdaExpression)joinExpression).Parameters.ToList(); var lambdaParameters = ((LambdaExpression)joinExpression).Parameters.ToList();
ExpressionContext expressionContext = new ExpressionContext(); ILambdaExpressions expressionContext = sqlBuilder.QueryBuilder.LambdaExpressions;
expressionContext.MappingColumns = this.Context.MappingColumns; expressionContext.MappingColumns = this.Context.MappingColumns;
expressionContext.MappingTables = this.Context.MappingTables; expressionContext.MappingTables = this.Context.MappingTables;
expressionContext.Resolve(joinExpression, ResolveExpressType.Join); expressionContext.Resolve(joinExpression, ResolveExpressType.Join);
@ -238,6 +238,7 @@ namespace SqlSugar
joinInfo.JoinIndex = i; joinInfo.JoinIndex = i;
result.Add((joinInfo)); result.Add((joinInfo));
} }
expressionContext.Clear();
return result; return result;
} }
protected Dictionary<string,string> GetEasyJoinInfo(Expression joinExpression, ref string shortName, ISqlBuilder builder, params Type[] entityTypeArray) protected Dictionary<string,string> GetEasyJoinInfo(Expression joinExpression, ref string shortName, ISqlBuilder builder, params Type[] entityTypeArray)

View File

@ -1,7 +1,8 @@
{ {
"version": "1.0.0-*", "version": "1.0.0-*",
"dependencies": { "dependencies": {
"MySql.Data": "7.0.7-m61",
"NETStandard.Library": "1.6.0", "NETStandard.Library": "1.6.0",
"Newtonsoft.Json": "9.0.1", "Newtonsoft.Json": "9.0.1",
"System.Collections.NonGeneric": "4.0.1", "System.Collections.NonGeneric": "4.0.1",