mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-08-25 10:08:11 +08:00
-
This commit is contained in:
parent
3e4a7163c6
commit
11d0602c4d
@ -149,7 +149,6 @@ namespace SqlSugar
|
|||||||
int i = DataRecord.GetOrdinal(fileName);
|
int i = DataRecord.GetOrdinal(fileName);
|
||||||
bool isNullable = false;
|
bool isNullable = false;
|
||||||
Label endIfLabel = generator.DefineLabel();
|
Label endIfLabel = generator.DefineLabel();
|
||||||
var underType = PubMethod.GetUnderType(propertyInfo, ref isNullable);
|
|
||||||
generator.Emit(OpCodes.Ldarg_0);
|
generator.Emit(OpCodes.Ldarg_0);
|
||||||
generator.Emit(OpCodes.Ldc_I4, i);
|
generator.Emit(OpCodes.Ldc_I4, i);
|
||||||
generator.Emit(OpCodes.Callvirt, isDBNullMethod);
|
generator.Emit(OpCodes.Callvirt, isDBNullMethod);
|
||||||
@ -157,7 +156,7 @@ 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);
|
||||||
GeneratorCallMethod(generator, underType, isNullable, propertyInfo, DataRecord.GetDataTypeName(i), propertyInfo.Name);
|
GeneratorCallMethod(generator,propertyInfo,i);
|
||||||
generator.Emit(OpCodes.Callvirt, propertyInfo.GetSetMethod());
|
generator.Emit(OpCodes.Callvirt, propertyInfo.GetSetMethod());
|
||||||
generator.MarkLabel(endIfLabel);
|
generator.MarkLabel(endIfLabel);
|
||||||
}
|
}
|
||||||
@ -173,8 +172,12 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GeneratorCallMethod(ILGenerator generator, Type type, bool isNullable, PropertyInfo pro, string dbTypeName, string fieldName)
|
private void GeneratorCallMethod(ILGenerator generator,PropertyInfo bindProperty,int ordinal)
|
||||||
{
|
{
|
||||||
|
var isNullableType = false;
|
||||||
|
var bindType = PubMethod.GetUnderType(bindProperty, ref isNullableType);
|
||||||
|
string dbTypeName = DataRecord.GetDataTypeName(ordinal);
|
||||||
|
string propertyName = bindProperty.Name;
|
||||||
var bind = Context.Database.DbBind;
|
var bind = Context.Database.DbBind;
|
||||||
List<string> guidThrow = bind.GuidThrow;
|
List<string> guidThrow = bind.GuidThrow;
|
||||||
List<string> intThrow = bind.IntThrow;
|
List<string> intThrow = bind.IntThrow;
|
||||||
@ -185,8 +188,8 @@ namespace SqlSugar
|
|||||||
List<string> shortThrow = bind.ShortThrow;
|
List<string> shortThrow = bind.ShortThrow;
|
||||||
MethodInfo method = null;
|
MethodInfo method = null;
|
||||||
var typeName = bind.ChangeDBTypeToCSharpType(dbTypeName);
|
var typeName = bind.ChangeDBTypeToCSharpType(dbTypeName);
|
||||||
var objTypeName = type.Name.ToLower();
|
var objTypeName = bindType.Name.ToLower();
|
||||||
var isEnum = type.IsEnum;
|
var isEnum = bindType.IsEnum;
|
||||||
if (isEnum)
|
if (isEnum)
|
||||||
{
|
{
|
||||||
typeName = "enum";
|
typeName = "enum";
|
||||||
@ -194,68 +197,68 @@ namespace SqlSugar
|
|||||||
else if (typeName.IsIn("byte[]", "other", "object") || dbTypeName.Contains("hierarchyid"))
|
else if (typeName.IsIn("byte[]", "other", "object") || dbTypeName.Contains("hierarchyid"))
|
||||||
{
|
{
|
||||||
generator.Emit(OpCodes.Call, getValueMethod);
|
generator.Emit(OpCodes.Call, getValueMethod);
|
||||||
generator.Emit(OpCodes.Unbox_Any, pro.PropertyType);
|
generator.Emit(OpCodes.Unbox_Any, bindProperty.PropertyType);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (isNullable)
|
if (isNullableType)
|
||||||
{
|
{
|
||||||
switch (typeName)
|
switch (typeName)
|
||||||
{
|
{
|
||||||
case "int":
|
case "int":
|
||||||
CheckType(intThrow, objTypeName, typeName, fieldName);
|
CheckType(intThrow, objTypeName, typeName, propertyName);
|
||||||
var isNotInt = objTypeName != "int32";
|
var isNotInt = objTypeName != "int32";
|
||||||
if (isNotInt)
|
if (isNotInt)
|
||||||
method = getOtherNull.MakeGenericMethod(type);
|
method = getOtherNull.MakeGenericMethod(bindType);
|
||||||
else
|
else
|
||||||
method = getConvertInt32; break;
|
method = getConvertInt32; break;
|
||||||
case "bool":
|
case "bool":
|
||||||
if (objTypeName != "bool" && objTypeName != "boolean")
|
if (objTypeName != "bool" && objTypeName != "boolean")
|
||||||
method = getOtherNull.MakeGenericMethod(type);
|
method = getOtherNull.MakeGenericMethod(bindType);
|
||||||
else
|
else
|
||||||
method = getConvertBoolean; break;
|
method = getConvertBoolean; break;
|
||||||
case "string":
|
case "string":
|
||||||
CheckType(stringThrow, objTypeName, typeName, fieldName);
|
CheckType(stringThrow, objTypeName, typeName, propertyName);
|
||||||
method = getString; break;
|
method = getString; break;
|
||||||
case "dateTime":
|
case "dateTime":
|
||||||
CheckType(dateThrow, objTypeName, typeName, fieldName);
|
CheckType(dateThrow, objTypeName, typeName, propertyName);
|
||||||
if (objTypeName != "datetime")
|
if (objTypeName != "datetime")
|
||||||
method = getOtherNull.MakeGenericMethod(type);
|
method = getOtherNull.MakeGenericMethod(bindType);
|
||||||
else
|
else
|
||||||
method = getConvertDateTime; break;
|
method = getConvertDateTime; break;
|
||||||
case "decimal":
|
case "decimal":
|
||||||
CheckType(decimalThrow, objTypeName, typeName, fieldName);
|
CheckType(decimalThrow, objTypeName, typeName, propertyName);
|
||||||
var isNotDecimal = objTypeName != "decimal";
|
var isNotDecimal = objTypeName != "decimal";
|
||||||
if (isNotDecimal)
|
if (isNotDecimal)
|
||||||
method = getOtherNull.MakeGenericMethod(type);
|
method = getOtherNull.MakeGenericMethod(bindType);
|
||||||
else
|
else
|
||||||
method = getConvertDecimal; break;
|
method = getConvertDecimal; break;
|
||||||
case "double":
|
case "double":
|
||||||
CheckType(doubleThrow, objTypeName, typeName, fieldName);
|
CheckType(doubleThrow, objTypeName, typeName, propertyName);
|
||||||
var isNotDouble = objTypeName != "double";
|
var isNotDouble = objTypeName != "double";
|
||||||
if (isNotDouble)
|
if (isNotDouble)
|
||||||
method = getOtherNull.MakeGenericMethod(type);
|
method = getOtherNull.MakeGenericMethod(bindType);
|
||||||
else
|
else
|
||||||
method = getConvertDouble; break;
|
method = getConvertDouble; break;
|
||||||
case "guid":
|
case "guid":
|
||||||
CheckType(guidThrow, objTypeName, typeName, fieldName);
|
CheckType(guidThrow, objTypeName, typeName, propertyName);
|
||||||
if (objTypeName != "guid")
|
if (objTypeName != "guid")
|
||||||
method = getOtherNull.MakeGenericMethod(type);
|
method = getOtherNull.MakeGenericMethod(bindType);
|
||||||
else
|
else
|
||||||
method = getConvertGuid; break;
|
method = getConvertGuid; break;
|
||||||
case "byte":
|
case "byte":
|
||||||
method = getConvertByte; break;
|
method = getConvertByte; break;
|
||||||
case "enum":
|
case "enum":
|
||||||
method = getConvertEnum_Null.MakeGenericMethod(type); break;
|
method = getConvertEnum_Null.MakeGenericMethod(bindType); break;
|
||||||
case "short":
|
case "short":
|
||||||
CheckType(shortThrow, objTypeName, typeName, fieldName);
|
CheckType(shortThrow, objTypeName, typeName, propertyName);
|
||||||
var isNotShort = objTypeName != "int16" && objTypeName != "short";
|
var isNotShort = objTypeName != "int16" && objTypeName != "short";
|
||||||
if (isNotShort)
|
if (isNotShort)
|
||||||
method = getOtherNull.MakeGenericMethod(type);
|
method = getOtherNull.MakeGenericMethod(bindType);
|
||||||
else
|
else
|
||||||
method = getConvertInt16;
|
method = getConvertInt16;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
method = getOtherNull.MakeGenericMethod(type); break;
|
method = getOtherNull.MakeGenericMethod(bindType); break;
|
||||||
}
|
}
|
||||||
generator.Emit(OpCodes.Call, method);
|
generator.Emit(OpCodes.Call, method);
|
||||||
}
|
}
|
||||||
@ -264,44 +267,44 @@ namespace SqlSugar
|
|||||||
switch (typeName)
|
switch (typeName)
|
||||||
{
|
{
|
||||||
case "int":
|
case "int":
|
||||||
CheckType(intThrow, objTypeName, typeName, fieldName);
|
CheckType(intThrow, objTypeName, typeName, propertyName);
|
||||||
var isNotInt = objTypeName != "int32";
|
var isNotInt = objTypeName != "int32";
|
||||||
if (isNotInt)
|
if (isNotInt)
|
||||||
method = getOther.MakeGenericMethod(type);
|
method = getOther.MakeGenericMethod(bindType);
|
||||||
else
|
else
|
||||||
method = getInt32; break;
|
method = getInt32; break;
|
||||||
case "bool":
|
case "bool":
|
||||||
if (objTypeName != "bool" && objTypeName != "boolean")
|
if (objTypeName != "bool" && objTypeName != "boolean")
|
||||||
method = getOther.MakeGenericMethod(type);
|
method = getOther.MakeGenericMethod(bindType);
|
||||||
else
|
else
|
||||||
method = getBoolean; break;
|
method = getBoolean; break;
|
||||||
case "string":
|
case "string":
|
||||||
CheckType(stringThrow, objTypeName, typeName, fieldName);
|
CheckType(stringThrow, objTypeName, typeName, propertyName);
|
||||||
method = getString; break;
|
method = getString; break;
|
||||||
case "dateTime":
|
case "dateTime":
|
||||||
CheckType(dateThrow, objTypeName, typeName, fieldName);
|
CheckType(dateThrow, objTypeName, typeName, propertyName);
|
||||||
if (objTypeName != "datetime")
|
if (objTypeName != "datetime")
|
||||||
method = getOther.MakeGenericMethod(type);
|
method = getOther.MakeGenericMethod(bindType);
|
||||||
else
|
else
|
||||||
method = getDateTime; break;
|
method = getDateTime; break;
|
||||||
case "decimal":
|
case "decimal":
|
||||||
CheckType(decimalThrow, objTypeName, typeName, fieldName);
|
CheckType(decimalThrow, objTypeName, typeName, propertyName);
|
||||||
var isNotDecimal = objTypeName != "decimal";
|
var isNotDecimal = objTypeName != "decimal";
|
||||||
if (isNotDecimal)
|
if (isNotDecimal)
|
||||||
method = getOther.MakeGenericMethod(type);
|
method = getOther.MakeGenericMethod(bindType);
|
||||||
else
|
else
|
||||||
method = getDecimal; break;
|
method = getDecimal; break;
|
||||||
case "double":
|
case "double":
|
||||||
CheckType(doubleThrow, objTypeName, typeName, fieldName);
|
CheckType(doubleThrow, objTypeName, typeName, propertyName);
|
||||||
var isNotDouble = objTypeName != "double";
|
var isNotDouble = objTypeName != "double";
|
||||||
if (isNotDouble)
|
if (isNotDouble)
|
||||||
method = getOther.MakeGenericMethod(type);
|
method = getOther.MakeGenericMethod(bindType);
|
||||||
else
|
else
|
||||||
method = getDouble; break;
|
method = getDouble; break;
|
||||||
case "guid":
|
case "guid":
|
||||||
CheckType(guidThrow, objTypeName, typeName, fieldName);
|
CheckType(guidThrow, objTypeName, typeName, propertyName);
|
||||||
if (objTypeName != "guid")
|
if (objTypeName != "guid")
|
||||||
method = getOther.MakeGenericMethod(type);
|
method = getOther.MakeGenericMethod(bindType);
|
||||||
else
|
else
|
||||||
method = getGuid; break;
|
method = getGuid; break;
|
||||||
case "byte":
|
case "byte":
|
||||||
@ -309,19 +312,19 @@ namespace SqlSugar
|
|||||||
case "enum":
|
case "enum":
|
||||||
method = getEnum; break;
|
method = getEnum; break;
|
||||||
case "short":
|
case "short":
|
||||||
CheckType(shortThrow, objTypeName, typeName, fieldName);
|
CheckType(shortThrow, objTypeName, typeName, propertyName);
|
||||||
var isNotShort = objTypeName != "int16" && objTypeName != "short";
|
var isNotShort = objTypeName != "int16" && objTypeName != "short";
|
||||||
if (isNotShort)
|
if (isNotShort)
|
||||||
method = getOther.MakeGenericMethod(type);
|
method = getOther.MakeGenericMethod(bindType);
|
||||||
else
|
else
|
||||||
method = getInt16;
|
method = getInt16;
|
||||||
break;
|
break;
|
||||||
default: method = getOther.MakeGenericMethod(type); break; ;
|
default: method = getOther.MakeGenericMethod(bindType); break; ;
|
||||||
}
|
}
|
||||||
generator.Emit(OpCodes.Call, method);
|
generator.Emit(OpCodes.Call, method);
|
||||||
if (method == getValueMethod)
|
if (method == getValueMethod)
|
||||||
{
|
{
|
||||||
generator.Emit(OpCodes.Unbox_Any, pro.PropertyType);
|
generator.Emit(OpCodes.Unbox_Any, bindProperty.PropertyType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user