This commit is contained in:
sunkaixuan
2017-05-17 02:09:38 +08:00
parent 5dc90b927e
commit 3c472ebc2e
5 changed files with 61 additions and 22 deletions

View File

@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@@ -9,9 +10,33 @@ namespace SqlSugar
public class EntityProvider public class EntityProvider
{ {
public SqlSugarClient Context { get; set; } public SqlSugarClient Context { get; set; }
public EntityInfo GetEntityInfo<T>()where T:class,new()
public List<EntityInfo> GetAllEntities()
{ {
string cacheKey = "GetEntityInfo"+typeof(T).FullName; string cacheKey = "GetAllEntities";
return CacheFactory.Func<List<EntityInfo>>(cacheKey,
(cm, key) =>
{
return cm[key];
}, (cm, key) =>
{
List<EntityInfo> reval = new List<EntityInfo>();
var classes = Assembly.Load(this.Context.EntityNamespace.Split('.').First()).GetTypes();
foreach (var item in classes)
{
reval.Add(GetEntityInfo(item));
}
return reval;
});
}
public EntityInfo GetEntityInfo<T>()
{
return GetEntityInfo(typeof(T));
}
public EntityInfo GetEntityInfo(Type type)
{
string cacheKey = "GetEntityInfo" + type.FullName;
return CacheFactory.Func<EntityInfo>(cacheKey, return CacheFactory.Func<EntityInfo>(cacheKey,
(cm, key) => (cm, key) =>
{ {
@@ -20,18 +45,17 @@ namespace SqlSugar
}, (cm, key) => }, (cm, key) =>
{ {
EntityInfo result = new EntityInfo(); 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 = type;
result.Type.GetProperties(); result.Type.GetProperties();
result.Name =result.Type.Name; result.EntityName = result.Type.Name;
result.Columns = new List<EntityColumnInfo>(); result.Columns = new List<EntityColumnInfo>();
foreach (var item in result.Type.GetProperties()) SetColumns(result);
{
EntityColumnInfo column = new EntityColumnInfo();
column.Name = item.Name;
column.PropertyInfo = item;
result.Columns.Add(column);
}
return result; return result;
}); });
} }
@@ -74,5 +98,18 @@ namespace SqlSugar
return mappingInfo == null ? dbColumnName : mappingInfo.DbColumnName; 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
} }
} }

View File

@@ -41,7 +41,7 @@ namespace SqlSugar
foreach (var deleteObj in deleteObjs) foreach (var deleteObj in deleteObjs)
{ {
var entityPropertyName = this.Context.EntityProvider.GetEntityPropertyName<T>(primaryField); var entityPropertyName = this.Context.EntityProvider.GetEntityPropertyName<T>(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); var value = columnInfo.PropertyInfo.GetValue(deleteObj, null);
primaryKeyValues.Add(value); primaryKeyValues.Add(value);
} }
@@ -66,7 +66,7 @@ namespace SqlSugar
if (i == 0) if (i == 0)
andString.Append(DeleteBuilder.WhereInAndTemplate + PubConst.Space); andString.Append(DeleteBuilder.WhereInAndTemplate + PubConst.Space);
var entityPropertyName = this.Context.EntityProvider.GetEntityPropertyName<T>(primaryField); var entityPropertyName = this.Context.EntityProvider.GetEntityPropertyName<T>(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); var entityValue = columnInfo.PropertyInfo.GetValue(deleteObj, null);
andString.AppendFormat(DeleteBuilder.WhereInEqualTemplate, primaryField, entityValue); andString.AppendFormat(DeleteBuilder.WhereInEqualTemplate, primaryField, entityValue);
++i; ++i;

View File

@@ -109,7 +109,7 @@ namespace SqlSugar
#region IgnoreColumns #region IgnoreColumns
if (this.Context.IgnoreColumns != null && this.Context.IgnoreColumns.Any()) 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 => this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it =>
{ {
return !currentIgnoreColumns.Any(i => it.EntityPropertyName.Equals(i.EntityPropertyName, StringComparison.CurrentCulture)); return !currentIgnoreColumns.Any(i => it.EntityPropertyName.Equals(i.EntityPropertyName, StringComparison.CurrentCulture));
@@ -127,10 +127,10 @@ namespace SqlSugar
} }
internal void Init() internal void Init()
{ {
this.InsertBuilder.TableName = EntityInfo.Name; this.InsertBuilder.TableName = EntityInfo.EntityName;
if (IsMappingTable) 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) if (mappingInfo != null)
{ {
this.InsertBuilder.TableName = mappingInfo.DbTableName; this.InsertBuilder.TableName = mappingInfo.DbTableName;
@@ -146,8 +146,8 @@ namespace SqlSugar
var columnInfo = new DbColumnInfo() var columnInfo = new DbColumnInfo()
{ {
Value = column.PropertyInfo.GetValue(item), Value = column.PropertyInfo.GetValue(item),
ColumnName = GetDbColumnName(column.Name), ColumnName = GetDbColumnName(column.PropertyName),
EntityPropertyName = column.Name, EntityPropertyName = column.PropertyName,
TableId = i TableId = i
}; };
insertItem.Add(columnInfo); insertItem.Add(columnInfo);
@@ -162,9 +162,9 @@ namespace SqlSugar
{ {
return entityName; 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()) if (MappingColumnList == null || !MappingColumnList.Any())
{ {

View File

@@ -10,7 +10,8 @@ namespace SqlSugar
public class EntityColumnInfo public class EntityColumnInfo
{ {
public PropertyInfo PropertyInfo { get; set; } 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 int Length { get; set; }
public string ColumnDescription { get; set; } public string ColumnDescription { get; set; }
public string DefaultValue { get; set; } public string DefaultValue { get; set; }

View File

@@ -9,7 +9,8 @@ namespace SqlSugar
{ {
public class EntityInfo public class EntityInfo
{ {
public string Name { get; set; } public string EntityName { get; set; }
public string DbTableName { get; set; }
public Type Type { get; set; } public Type Type { get; set; }
public List<EntityColumnInfo> Columns { get; set; } public List<EntityColumnInfo> Columns { get; set; }
} }