public void BulkInsert <T, TOut>(List <BaseEntityObject> values, int?batchSize = null) where T : BaseEntityObject, new() where TOut : BaseEntity, new() { if (_casEnvironment.IdentityUser.UserType == UsetType.ReadOnly) { return; } if (!typeof(TOut).IsSubclassOf(typeof(BaseEntity))) { throw new ArgumentException("T", "не является наследником " + typeof(BaseEntity).Name); } if (!typeof(T).IsSubclassOf(typeof(BaseEntityObject))) { throw new ArgumentException("TOut", "не является наследником " + typeof(BaseEntityObject).Name); } var method = GetMethod(typeof(T), "Convert"); var res = new List <TOut>(); foreach (var value in values) { var obj = InvokeConverter <T, TOut>((T)value, method); obj.Guid = value.Guid = Guid.NewGuid().ToString(); res.Add(obj); } var dict = _apiProvider.BulkInsert(res, batchSize); foreach (var value in values) { value.ItemId = dict[value.Guid]; } }