Exemplo n.º 1
0
        public static int BulkAddAll <TEntity>(this IBulkInsertContext context, IEnumerable <TEntity> entities, Action callback = null) where TEntity : class
        {
            var entitiesWithRequiredUser = entities as IList <TEntity> ?? entities.ToList();

            BulkInsert(context, entitiesWithRequiredUser, callback);
            return(entitiesWithRequiredUser.Count);
        }
        protected static void LoadRecords <T>(IBulkInsertContext context, IMother <T> mother, string message, ConsoleTicker consoleTicker, int?takeLimit = null)
            where T : class
        {
            var records = Birth(mother, message, consoleTicker, takeLimit);

            if (message != null && consoleTicker != null)
            {
                Console.Write("\r");
            }
            LoadRecords(context, records, message, consoleTicker, takeLimit);
        }
        protected static void LoadRecords <T>(IBulkInsertContext context, List <T> records, string message, ConsoleTicker consoleTicker)
            where T : class
        {
            if (message != null)
            {
                Console.Write(message + "...\r");
            }

            consoleTicker.ResetTicker();
            var count = context.BulkAddAll(records, message != null ? () => consoleTicker.TickConsole(message + "...") : (Action)null);

            consoleTicker.ReplaceCurrentLine("{0}: {1} records.", message, count);
        }
Exemplo n.º 4
0
        private static List <TEntity> LoadProducts <TEntity>(IBulkInsertContext newContext, IMother <TEntity> mother, ConsoleTicker consoleTicker, string message, Func <TEntity, Product> productSelector = null) where TEntity : class
        {
            var products = mother.BirthAll(() => consoleTicker.TickConsole(message + "...")).ToList();

            consoleTicker.ReplaceCurrentLine(message);

            if (productSelector != null)
            {
                LoadRecords(newContext, products.Select(productSelector), "\t\tproducts", consoleTicker);
            }
            LoadRecords(newContext, products, "\t" + message.ToLower(), consoleTicker);

            return(products);
        }
        protected static void LoadRecords <T>(IBulkInsertContext context, IEnumerable <T> records, string message, ConsoleTicker consoleTicker, int?takeLimit = null)
            where T : class
        {
            if (message != null)
            {
                Console.Write(message + "...\r");
            }

            var recordsList = takeLimit != null?records.Take(takeLimit.Value).ToList() : records.ToList();

            consoleTicker.ResetTicker();
            var count = context.BulkAddAll(recordsList, message != null ? () => consoleTicker.TickConsole(message + "...") : (Action)null);

            consoleTicker.ReplaceCurrentLine("{0}: {1} records.", message, count);
        }
Exemplo n.º 6
0
        public static void BulkInsert <TEntity>(this IBulkInsertContext context, IList <TEntity> entities, Action callback = null) where TEntity : class
        {
            // inspired by http://elegantcode.com/2012/01/26/sqlbulkcopy-for-generic-listt-useful-for-entity-framework-nhibernate/
            using (var bulkCopy = new SqlBulkCopy(context.ConnectionString))
            {
                bulkCopy.BulkCopyTimeout = 300;
                var objContext = context.ObjectContext;
                var entityType = objContext.GetEntityType <TEntity>();
                var tableName  = objContext.GetTableName <TEntity>();

                bulkCopy.BatchSize            = entities.Count;
                bulkCopy.DestinationTableName = tableName;

                var columns = DataTableColumnHelper.GetDataTableColumns(entityType.Properties);
                var table   = BuildDataTable(bulkCopy, columns);
                LoadDataTable(entities, columns, table, callback);

                bulkCopy.WriteToServer(table);
            }
        }