예제 #1
0
 private static void ClearDatabase()
 {
     using (var context = new ExampleContext())
     {
         var sql = String.Format("TRUNCATE TABLE {0}", context.GetTableName <Example>());
         context.Database.ExecuteSqlCommand(sql);
     }
 }
예제 #2
0
        private static void PersistDataUsingSqlBulkCopy(IEnumerable <Example> data)
        {
            using (var context = new ExampleContext())
            {
                const SqlBulkCopyOptions options = SqlBulkCopyOptions.CheckConstraints |
                                                   SqlBulkCopyOptions.KeepNulls |
                                                   SqlBulkCopyOptions.KeepIdentity;

                var inputData = new DataTable();

                var columns = context.GetColumns <Example>().ToList();

                foreach (var column in columns)
                {
                    inputData.Columns.Add(column.Item1, column.Item2);
                }

                foreach (var record in data)
                {
                    var row = inputData.NewRow();
                    foreach (var column in columns)
                    {
                        row[column.Item1] = typeof(Example).GetProperty(column.Item1).GetValue(record);
                    }
                    inputData.Rows.Add(row);
                }

                using (var tx = new TransactionScope())
                {
                    using (var bcp = new SqlBulkCopy(context.Database.Connection.ConnectionString, options))
                    {
                        bcp.BatchSize            = 2500;
                        bcp.DestinationTableName = context.GetTableName <Example>();

                        bcp.WriteToServer(inputData);
                    }

                    tx.Complete();
                }
            }
        }