| Вызов с ручным маппингом | await dbContext.Entities.InsertOrUpdateAsync( () => new MyEntity() { UniqueKey = entity.UniqueKey }, onDuplicateKeyUpdateSetter: null, keySelector: () => new MyEntity() { UniqueKey = default } ); | Автоматическое формирование выражение с заполнением всех insert свойств. | public static class LinqToDBHelper { public static Expression<Func<T>> InsertInitAllExpression<T>( T instance, MappingSchema? schema = null) where T : class, new() { var type = typeof(T);
schema = schema ?? MappingSchema.Default; var descriptor = schema.GetEntityDescriptor(type);
var toInsert = descriptor.Columns.Where(c => !c.SkipOnInsert); var param = Expression.Parameter(typeof(T));
var newExpression = Expression.New(type);
var instanceExpression = Expression.Constant(instance); var memberInitExpression = Expression.MemberInit( newExpression, toInsert.Select( e => Expression.Bind( e.MemberInfo, Expression.MakeMemberAccess( instanceExpression, e.MemberInfo ) ) ) );
var result = Expression.Lambda<Func<T>>(memberInitExpression); return result; } } | Использование автоматического выражения. | await dbContext.Entities.InsertOrUpdateAsync( LinqToDBHelper.InsertInitAllExpression(entity, dbContext.MappingSchema), onDuplicateKeyUpdateSetter: null, keySelector: () => new MyEntity() { UniqueKey = default } ); |
|