mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-10-15 18:55:07 +08:00
Synchronization code
This commit is contained in:
@@ -10,11 +10,13 @@ namespace SqlSugar
|
||||
{
|
||||
public partial class DbBindAccessory
|
||||
{
|
||||
public QueryBuilder QueryBuilder { get; set; }
|
||||
public QueryBuilder QueryBuilder { get; set; }
|
||||
|
||||
protected List<T> GetEntityList<T>(SqlSugarProvider context, IDataReader dataReader)
|
||||
{
|
||||
Type type = typeof(T);
|
||||
var entityInfo = context.EntityMaintenance.GetEntityInfo(type);
|
||||
var isOwnsOne = entityInfo.Columns.Any(it => it.ForOwnsOnePropertyInfo != null);
|
||||
string types = null;
|
||||
var fieldNames = GetDataReaderNames(dataReader,ref types);
|
||||
string cacheKey = GetCacheKey(type,fieldNames) + types;
|
||||
@@ -44,6 +46,7 @@ namespace SqlSugar
|
||||
// Check.Exception(true, ErrorMessage.EntityMappingError, ex.Message);
|
||||
//}
|
||||
SetAppendColumns(dataReader);
|
||||
SetOwnsOne(addItem,isOwnsOne,entityInfo,dataReader);
|
||||
}
|
||||
ExecuteDataAfterFun(context, dataAfterFunc, result);
|
||||
}
|
||||
@@ -64,6 +67,8 @@ namespace SqlSugar
|
||||
protected async Task<List<T>> GetEntityListAsync<T>(SqlSugarProvider context, IDataReader dataReader)
|
||||
{
|
||||
Type type = typeof(T);
|
||||
var entityInfo = context.EntityMaintenance.GetEntityInfo(type);
|
||||
var isOwnsOne = entityInfo.Columns.Any(it => it.ForOwnsOnePropertyInfo != null);
|
||||
string types = null;
|
||||
var fieldNames = GetDataReaderNames(dataReader,ref types);
|
||||
string cacheKey = GetCacheKey(type, fieldNames)+types;
|
||||
@@ -93,6 +98,7 @@ namespace SqlSugar
|
||||
// Check.Exception(true, ErrorMessage.EntityMappingError, ex.Message);
|
||||
//}
|
||||
SetAppendColumns(dataReader);
|
||||
SetOwnsOne(addItem, isOwnsOne, entityInfo, dataReader);
|
||||
}
|
||||
ExecuteDataAfterFun(context, dataAfterFunc, result);
|
||||
}
|
||||
@@ -110,6 +116,29 @@ namespace SqlSugar
|
||||
return result;
|
||||
}
|
||||
|
||||
private void SetOwnsOne(object addItem, bool isOwnsOne, EntityInfo entityInfo, IDataReader dataReader)
|
||||
{
|
||||
if (isOwnsOne)
|
||||
{
|
||||
var ownsOneColumnsKv = entityInfo.Columns.Where(it => it.ForOwnsOnePropertyInfo != null)
|
||||
.GroupBy(it=>it.ForOwnsOnePropertyInfo).ToList();
|
||||
foreach (var kv in ownsOneColumnsKv)
|
||||
{
|
||||
var parentObj=kv.Key.GetValue(addItem);
|
||||
if (parentObj == null)
|
||||
{
|
||||
parentObj = kv.Key.PropertyType.Assembly.CreateInstance(kv.Key.PropertyType.FullName);
|
||||
kv.Key.SetValue(addItem, parentObj);
|
||||
}
|
||||
foreach (var item in kv.ToList())
|
||||
{
|
||||
var itemIndex=dataReader.GetOrdinal(item.DbColumnName);
|
||||
item.PropertyInfo.SetValue(parentObj, dataReader.GetValue(itemIndex));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void FormatT<T>(T addItem)
|
||||
{
|
||||
var formats = this.QueryBuilder.QueryableFormats;
|
||||
|
@@ -112,6 +112,10 @@ namespace SqlSugar
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else if (columnInfo.ForOwnsOnePropertyInfo!=null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (columnInfo != null && columnInfo.PropertyInfo.GetSetMethod(true) != null)
|
||||
{
|
||||
var isGemo = columnInfo.PropertyInfo?.PropertyType?.FullName=="NetTopologySuite.Geometries.Geometry";
|
||||
|
@@ -24,7 +24,44 @@ namespace SqlSugar
|
||||
);
|
||||
return conditionalExpression;
|
||||
}
|
||||
|
||||
internal static bool IsOwsOne(ExpressionContext context, Expression member)
|
||||
{
|
||||
var isOwsOne = false;
|
||||
if (member is MemberExpression memberExp)
|
||||
{
|
||||
var name = memberExp?.Member?.Name;
|
||||
if (memberExp.Expression is MemberExpression parentMemberExp)
|
||||
{
|
||||
if (name != null && parentMemberExp.Expression is ParameterExpression)
|
||||
{
|
||||
var rootExp = (parentMemberExp.Expression as ParameterExpression);
|
||||
var entityInfo = context?.SugarContext?.Context?.EntityMaintenance?.GetEntityInfo(rootExp.Type);
|
||||
var navColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyName == name);
|
||||
isOwsOne = navColumn?.ForOwnsOnePropertyInfo != null;
|
||||
}
|
||||
}
|
||||
}
|
||||
return isOwsOne;
|
||||
}
|
||||
internal static EntityColumnInfo GetOwsOneColumnInfo(ExpressionContext context, Expression member)
|
||||
{
|
||||
EntityColumnInfo entityColumnInfo = new EntityColumnInfo();
|
||||
if (member is MemberExpression memberExp)
|
||||
{
|
||||
var name = memberExp?.Member?.Name;
|
||||
if (memberExp.Expression is MemberExpression parentMemberExp)
|
||||
{
|
||||
if (name != null && parentMemberExp.Expression is ParameterExpression)
|
||||
{
|
||||
var rootExp = (parentMemberExp.Expression as ParameterExpression);
|
||||
var entityInfo = context?.SugarContext?.Context?.EntityMaintenance?.GetEntityInfo(rootExp.Type);
|
||||
var navColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyName == name);
|
||||
entityColumnInfo= navColumn;
|
||||
}
|
||||
}
|
||||
}
|
||||
return entityColumnInfo;
|
||||
}
|
||||
|
||||
internal static bool IsNavMember(ExpressionContext context, Expression member)
|
||||
{
|
||||
|
@@ -457,6 +457,26 @@ namespace SqlSugar
|
||||
|
||||
private void ResolveMemberValue(ExpressionParameter parameter, ExpressionParameter baseParameter, bool? isLeft, bool isSetTempData, MemberExpression expression)
|
||||
{
|
||||
if (ExpressionTool.IsOwsOne(this.Context, expression))
|
||||
{
|
||||
var column = ExpressionTool.GetOwsOneColumnInfo(this.Context, expression);
|
||||
var columnName = column.DbColumnName;
|
||||
if (this.Context.IsJoin)
|
||||
{
|
||||
var expParameterInfo = ExpressionTool.GetParameters(expression).First();
|
||||
columnName = $"{expParameterInfo.Name}.{columnName}";
|
||||
}
|
||||
columnName=this.Context.GetTranslationColumnName(columnName);
|
||||
if (isSetTempData)
|
||||
{
|
||||
baseParameter.CommonTempData = columnName;
|
||||
}
|
||||
else
|
||||
{
|
||||
AppendMember(parameter, isLeft, columnName);
|
||||
}
|
||||
return;
|
||||
}
|
||||
var value = ExpressionTool.GetMemberValue(expression.Member, expression);
|
||||
if (isSetTempData)
|
||||
{
|
||||
|
Reference in New Issue
Block a user