From 3c472ebc2ed4af99fd26c8b31e56a36115bed9aa Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Wed, 17 May 2017 02:09:38 +0800 Subject: [PATCH] - --- .../EntityProvider/EntityProvider.cs | 59 +++++++++++++++---- .../DeleteProvider/DeleteableProvider.cs | 4 +- .../InsertableProvider/InsertableProvider.cs | 14 ++--- SqlSugar/Entities/EntityColumnInfo.cs | 3 +- SqlSugar/Entities/EntityInfo.cs | 3 +- 5 files changed, 61 insertions(+), 22 deletions(-) diff --git a/SqlSugar/Abstract/DbProvider/EntityProvider/EntityProvider.cs b/SqlSugar/Abstract/DbProvider/EntityProvider/EntityProvider.cs index c6bb7854d..bdc7eb887 100644 --- a/SqlSugar/Abstract/DbProvider/EntityProvider/EntityProvider.cs +++ b/SqlSugar/Abstract/DbProvider/EntityProvider/EntityProvider.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; using System.Text; using System.Threading.Tasks; @@ -9,9 +10,33 @@ namespace SqlSugar public class EntityProvider { public SqlSugarClient Context { get; set; } - public EntityInfo GetEntityInfo()where T:class,new() + + public List GetAllEntities() { - string cacheKey = "GetEntityInfo"+typeof(T).FullName; + string cacheKey = "GetAllEntities"; + return CacheFactory.Func>(cacheKey, + (cm, key) => + { + return cm[key]; + + }, (cm, key) => + { + List reval = new List(); + var classes = Assembly.Load(this.Context.EntityNamespace.Split('.').First()).GetTypes(); + foreach (var item in classes) + { + reval.Add(GetEntityInfo(item)); + } + return reval; + }); + } + public EntityInfo GetEntityInfo() + { + return GetEntityInfo(typeof(T)); + } + public EntityInfo GetEntityInfo(Type type) + { + string cacheKey = "GetEntityInfo" + type.FullName; return CacheFactory.Func(cacheKey, (cm, key) => { @@ -20,18 +45,17 @@ namespace SqlSugar }, (cm, key) => { EntityInfo result = new EntityInfo(); - var type = typeof(T); + var sugarAttributeInfo = type.GetCustomAttributes(typeof(SugarTable), true).Where(it => it is SugarTable).SingleOrDefault(); + if (sugarAttributeInfo.IsValuable()) + { + var sugarTable = (SugarTable)sugarAttributeInfo; + result.DbTableName = sugarTable.TableName; + } result.Type = type; result.Type.GetProperties(); - result.Name =result.Type.Name; + result.EntityName = result.Type.Name; result.Columns = new List(); - foreach (var item in result.Type.GetProperties()) - { - EntityColumnInfo column = new EntityColumnInfo(); - column.Name = item.Name; - column.PropertyInfo = item; - result.Columns.Add(column); - } + SetColumns(result); return result; }); } @@ -74,5 +98,18 @@ namespace SqlSugar return mappingInfo == null ? dbColumnName : mappingInfo.DbColumnName; } } + + #region Primary key + private static void SetColumns(EntityInfo result) + { + foreach (var item in result.Type.GetProperties()) + { + EntityColumnInfo column = new EntityColumnInfo(); + column.PropertyName = item.Name; + column.PropertyInfo = item; + result.Columns.Add(column); + } + } + #endregion } } diff --git a/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs b/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs index 58e4644b2..4d4e41de7 100644 --- a/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs +++ b/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs @@ -41,7 +41,7 @@ namespace SqlSugar foreach (var deleteObj in deleteObjs) { var entityPropertyName = this.Context.EntityProvider.GetEntityPropertyName(primaryField); - var columnInfo = entityInfo.Columns.Single(it => it.Name == entityPropertyName); + var columnInfo = entityInfo.Columns.Single(it => it.PropertyName == entityPropertyName); var value = columnInfo.PropertyInfo.GetValue(deleteObj, null); primaryKeyValues.Add(value); } @@ -66,7 +66,7 @@ namespace SqlSugar if (i == 0) andString.Append(DeleteBuilder.WhereInAndTemplate + PubConst.Space); var entityPropertyName = this.Context.EntityProvider.GetEntityPropertyName(primaryField); - var columnInfo = entityInfo.Columns.Single(it => it.Name == entityPropertyName); + var columnInfo = entityInfo.Columns.Single(it => it.PropertyName == entityPropertyName); var entityValue = columnInfo.PropertyInfo.GetValue(deleteObj, null); andString.AppendFormat(DeleteBuilder.WhereInEqualTemplate, primaryField, entityValue); ++i; diff --git a/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index 13a0fab9e..e59a18947 100644 --- a/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -109,7 +109,7 @@ namespace SqlSugar #region IgnoreColumns if (this.Context.IgnoreColumns != null && this.Context.IgnoreColumns.Any()) { - var currentIgnoreColumns = this.Context.IgnoreColumns.Where(it => it.EntityName == this.EntityInfo.Name).ToList(); + var currentIgnoreColumns = this.Context.IgnoreColumns.Where(it => it.EntityName == this.EntityInfo.EntityName).ToList(); this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => { return !currentIgnoreColumns.Any(i => it.EntityPropertyName.Equals(i.EntityPropertyName, StringComparison.CurrentCulture)); @@ -127,10 +127,10 @@ namespace SqlSugar } internal void Init() { - this.InsertBuilder.TableName = EntityInfo.Name; + this.InsertBuilder.TableName = EntityInfo.EntityName; if (IsMappingTable) { - var mappingInfo = this.Context.MappingTables.SingleOrDefault(it => it.EntityName == EntityInfo.Name); + var mappingInfo = this.Context.MappingTables.SingleOrDefault(it => it.EntityName == EntityInfo.EntityName); if (mappingInfo != null) { this.InsertBuilder.TableName = mappingInfo.DbTableName; @@ -146,8 +146,8 @@ namespace SqlSugar var columnInfo = new DbColumnInfo() { Value = column.PropertyInfo.GetValue(item), - ColumnName = GetDbColumnName(column.Name), - EntityPropertyName = column.Name, + ColumnName = GetDbColumnName(column.PropertyName), + EntityPropertyName = column.PropertyName, TableId = i }; insertItem.Add(columnInfo); @@ -162,9 +162,9 @@ namespace SqlSugar { return entityName; } - if (this.Context.MappingColumns.Any(it => it.EntityName.Equals(EntityInfo.Name, StringComparison.CurrentCultureIgnoreCase))) + if (this.Context.MappingColumns.Any(it => it.EntityName.Equals(EntityInfo.EntityName, StringComparison.CurrentCultureIgnoreCase))) { - this.MappingColumnList = this.Context.MappingColumns.Where(it => it.EntityName.Equals(EntityInfo.Name, StringComparison.CurrentCultureIgnoreCase)).ToList(); + this.MappingColumnList = this.Context.MappingColumns.Where(it => it.EntityName.Equals(EntityInfo.EntityName, StringComparison.CurrentCultureIgnoreCase)).ToList(); } if (MappingColumnList == null || !MappingColumnList.Any()) { diff --git a/SqlSugar/Entities/EntityColumnInfo.cs b/SqlSugar/Entities/EntityColumnInfo.cs index d00310d5c..7ca7d70c1 100644 --- a/SqlSugar/Entities/EntityColumnInfo.cs +++ b/SqlSugar/Entities/EntityColumnInfo.cs @@ -10,7 +10,8 @@ namespace SqlSugar public class EntityColumnInfo { public PropertyInfo PropertyInfo { get; set; } - public string Name { get; set; } + public string PropertyName { get; set; } + public string DbColumnName { get; set; } public int Length { get; set; } public string ColumnDescription { get; set; } public string DefaultValue { get; set; } diff --git a/SqlSugar/Entities/EntityInfo.cs b/SqlSugar/Entities/EntityInfo.cs index 8a7c2d763..e43cf8c55 100644 --- a/SqlSugar/Entities/EntityInfo.cs +++ b/SqlSugar/Entities/EntityInfo.cs @@ -9,7 +9,8 @@ namespace SqlSugar { public class EntityInfo { - public string Name { get; set; } + public string EntityName { get; set; } + public string DbTableName { get; set; } public Type Type { get; set; } public List Columns { get; set; } }