Code optimization

This commit is contained in:
sunkaixuan 2019-05-16 17:47:38 +08:00
parent ae8e2706e3
commit f1030ab8aa

View File

@ -119,7 +119,7 @@ namespace SqlSugar
{ {
if (this.ReaderKeys.Any(it => it.Equals(fileName, StringComparison.CurrentCultureIgnoreCase))) if (this.ReaderKeys.Any(it => it.Equals(fileName, StringComparison.CurrentCultureIgnoreCase)))
{ {
BindField(generator, result, columnInfo.PropertyInfo, ReaderKeys.First(it => it.Equals(fileName, StringComparison.CurrentCultureIgnoreCase))); BindField(generator, result, columnInfo, ReaderKeys.First(it => it.Equals(fileName, StringComparison.CurrentCultureIgnoreCase)));
} }
} }
} }
@ -142,7 +142,7 @@ namespace SqlSugar
{ {
} }
private void BindField(ILGenerator generator, LocalBuilder result, PropertyInfo propertyInfo, string fieldName) private void BindField(ILGenerator generator, LocalBuilder result, EntityColumnInfo columnInfo, string fieldName)
{ {
int i = DataRecord.GetOrdinal(fieldName); int i = DataRecord.GetOrdinal(fieldName);
Label endIfLabel = generator.DefineLabel(); Label endIfLabel = generator.DefineLabel();
@ -153,21 +153,21 @@ namespace SqlSugar
generator.Emit(OpCodes.Ldloc, result); generator.Emit(OpCodes.Ldloc, result);
generator.Emit(OpCodes.Ldarg_0); generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldc_I4, i); generator.Emit(OpCodes.Ldc_I4, i);
BindMethod(generator, propertyInfo, i); BindMethod(generator, columnInfo, i);
generator.Emit(OpCodes.Callvirt, propertyInfo.GetSetMethod()); generator.Emit(OpCodes.Callvirt, columnInfo.PropertyInfo.GetSetMethod());
generator.MarkLabel(endIfLabel); generator.MarkLabel(endIfLabel);
} }
private void BindMethod(ILGenerator generator, PropertyInfo bindProperty, int ordinal) private void BindMethod(ILGenerator generator, EntityColumnInfo columnInfo, int ordinal)
{ {
IDbBind bind = Context.Ado.DbBind; IDbBind bind = Context.Ado.DbBind;
bool isNullableType = false; bool isNullableType = false;
MethodInfo method = null; MethodInfo method = null;
Type bindPropertyType = UtilMethods.GetUnderType(bindProperty, ref isNullableType); Type bindPropertyType = UtilMethods.GetUnderType(columnInfo.PropertyInfo, ref isNullableType);
string dbTypeName = UtilMethods.GetParenthesesValue(DataRecord.GetDataTypeName(ordinal)); string dbTypeName = UtilMethods.GetParenthesesValue(DataRecord.GetDataTypeName(ordinal));
if (dbTypeName.IsNullOrEmpty()) { if (dbTypeName.IsNullOrEmpty()) {
dbTypeName = bindPropertyType.Name; dbTypeName = bindPropertyType.Name;
} }
string propertyName = bindProperty.Name; string propertyName = columnInfo.PropertyName;
string validPropertyName = bind.GetPropertyTypeName(dbTypeName); string validPropertyName = bind.GetPropertyTypeName(dbTypeName);
validPropertyName = validPropertyName == "byte[]" ? "byteArray" : validPropertyName; validPropertyName = validPropertyName == "byte[]" ? "byteArray" : validPropertyName;
CSharpDataType validPropertyType = (CSharpDataType)Enum.Parse(typeof(CSharpDataType), validPropertyName); CSharpDataType validPropertyType = (CSharpDataType)Enum.Parse(typeof(CSharpDataType), validPropertyName);
@ -195,7 +195,7 @@ namespace SqlSugar
{ {
method = getValueMethod; method = getValueMethod;
generator.Emit(OpCodes.Call, method); generator.Emit(OpCodes.Call, method);
generator.Emit(OpCodes.Unbox_Any, bindProperty.PropertyType); generator.Emit(OpCodes.Unbox_Any, columnInfo.PropertyInfo.PropertyType);
return; return;
} }
else else
@ -302,7 +302,7 @@ namespace SqlSugar
generator.Emit(OpCodes.Call, method); generator.Emit(OpCodes.Call, method);
if (method == getValueMethod) if (method == getValueMethod)
{ {
generator.Emit(OpCodes.Unbox_Any, bindProperty.PropertyType); generator.Emit(OpCodes.Unbox_Any, columnInfo.PropertyInfo.PropertyType);
} }
#endregion #endregion
} }