@@ -98,7 +98,6 @@ public static int BulkInsert<TEntity, TData>(
98
98
//获取实体类注册属性信息(为影子属性服务,没有设置影子属性时为空不使用)
99
99
var modelProperties = shadowPropertySetters . Length > 0 ? db . Model . FindEntityType ( entityType ) . GetProperties ( ) : null ;
100
100
//构建数据库命令参数序列并获取取值信息
101
- //var setValueInfos = TranslateExpressionToDbParameters(cmd, modelProperties, setValueExpression, shadowPropertySetters, batchSize);
102
101
var setValueInfo = BuildEntitySetValueInfo ( cmd , batchSize , modelProperties , setValueExpression , shadowPropertySetters ) ;
103
102
//单批次计数
104
103
var counting = 0 ;
@@ -218,64 +217,6 @@ private static string CreateBulkInsertSql(string tableName, IList<EntityPropInfo
218
217
/// <param name="shadowPropertySetters">设置影子属性的表达式集合</param>
219
218
/// <param name="batchSize">每批次数量</param>
220
219
/// <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
-
279
220
private static EntitySetValueInfo < TData > BuildEntitySetValueInfo < TEntity , TData > ( DbCommand cmd ,
280
221
int batchSize ,
281
222
IEnumerable < IProperty > modelProperties ,
0 commit comments