Skip to content

Commit 27409a1

Browse files
authored
Update BulkInsert.cs
1 parent 7e39eac commit 27409a1

File tree

1 file changed

+0
-59
lines changed

1 file changed

+0
-59
lines changed

EFCore/BulkInsert.cs

Lines changed: 0 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ public static int BulkInsert<TEntity, TData>(
9898
//获取实体类注册属性信息(为影子属性服务,没有设置影子属性时为空不使用)
9999
var modelProperties = shadowPropertySetters.Length > 0 ? db.Model.FindEntityType(entityType).GetProperties() : null;
100100
//构建数据库命令参数序列并获取取值信息
101-
//var setValueInfos = TranslateExpressionToDbParameters(cmd, modelProperties, setValueExpression, shadowPropertySetters, batchSize);
102101
var setValueInfo = BuildEntitySetValueInfo(cmd, batchSize, modelProperties, setValueExpression, shadowPropertySetters);
103102
//单批次计数
104103
var counting = 0;
@@ -218,64 +217,6 @@ private static string CreateBulkInsertSql(string tableName, IList<EntityPropInfo
218217
/// <param name="shadowPropertySetters">设置影子属性的表达式集合</param>
219218
/// <param name="batchSize">每批次数量</param>
220219
/// <returns></returns>
221-
private static SetValueInfo<TData>[] TranslateExpressionToDbParameters<TEntity, TData>(
222-
DbCommand cmd,
223-
IEnumerable<IProperty> modelProperties,
224-
Expression<Func<TData, TEntity>> setValueExpression,
225-
(string entityPropName, Expression<Func<TData, Type, object>> valueSelector)[] shadowPropertySetters,
226-
int batchSize) where TEntity : class
227-
{
228-
//将模型参数转换为字典,仅对影子属性有效,可能为空
229-
var propClrTypeDic = modelProperties?.ToDictionary(p => p.Name, p => p.ClrType);
230-
//获取表达式树中的对象成员初始化器中的赋值表达式
231-
//[Prop = obj.Prop],
232-
var settingMembers = (setValueExpression.Body as MemberInitExpression).Bindings.Cast<MemberAssignment>();
233-
//将成员初始化器的赋值表达式换为取值信息
234-
var setValueInfos = settingMembers
235-
.Select(member =>
236-
{
237-
//赋值表达式中被赋值的属性信息
238-
//[Prop] = obj.Prop,
239-
var prop = member.Member as PropertyInfo;
240-
//赋值表达式中取值的访问属性表达式
241-
//Prop = [obj.Prop],
242-
var mExpression = member.Expression as MemberExpression;
243-
244-
return new SetValueInfo<TData>
245-
{
246-
SourceTypePropName = member.Member.Name,
247-
SourceTypePropType = prop.PropertyType,
248-
SourceTypePropDbType = ToDbType(prop.PropertyType),
249-
//构建委托表达式并编译成委托以进行调用
250-
//[(obj,type) => obj.Prop]
251-
GetDataValueDelegate = Expression.Lambda(mExpression/*[obj.Prop]*/,
252-
mExpression.Expression as ParameterExpression/*[obj]*/ ?? Expression.Parameter(typeof(object))/*dummy*/,
253-
Expression.Parameter(typeof(Type), "type")/*[type]*/).Compile(),
254-
};
255-
}).Concat(shadowPropertySetters.Select(t =>
256-
{
257-
var propType = propClrTypeDic.GetValueOrDefault(t.entityPropName);
258-
return new SetValueInfo<TData>
259-
{
260-
SourceTypePropName = t.entityPropName,
261-
SourceTypePropType = propType,
262-
SourceTypePropDbType = ToDbType(propType),
263-
//更复杂的取值表达式,可以获取到目标影子属性的数据类型并方便值转换
264-
GetDataValueDelegate = t.valueSelector.Compile()
265-
};
266-
})).ToArray();
267-
int pIndex = 0;
268-
for (int batch = 0; batch < batchSize; batch++)
269-
{
270-
foreach (var member in setValueInfos)
271-
{
272-
//循环添加参数
273-
SetParameter(cmd, member.SourceTypePropDbType, pIndex++);
274-
}
275-
}
276-
return setValueInfos;
277-
}
278-
279220
private static EntitySetValueInfo<TData> BuildEntitySetValueInfo<TEntity, TData>(DbCommand cmd,
280221
int batchSize,
281222
IEnumerable<IProperty> modelProperties,

0 commit comments

Comments
 (0)