コード例 #1
0
        /// <summary>
        /// Bulkcopies the list of data into the database
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="data"></param>
        public void BulkCopy <T>(List <T> data) where T : IModelBase, new()
        {
            var columns = new T().GetFields().ToDictionary(p => p.Key, q => q.Value.GetType());

            using (SqlConnection conn = new SqlConnection(_connectionString))
            {
                conn.Open();

                SqlTransaction trans = conn.BeginTransaction();

                DataTable table = new DataTable();
                table.Columns.AddRange(columns.Select(c => new DataColumn(c.Key, c.Value)).ToArray());

                SqlBulkCopy bulk = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, trans)
                {
                    DestinationTableName = ModelBaseHelper.GetTableName <T>()
                };
                foreach (var column in columns)
                {
                    bulk.ColumnMappings.Add(new SqlBulkCopyColumnMapping(column.Key, column.Key));
                }

                data.ForEach(row => table.Rows.Add(row.ToObjectArray()));

                bulk.WriteToServer(table);

                trans.Commit();
            }
        }
コード例 #2
0
        public void Create <T>() where T : IModelBase
        {
            using (SqlConnection conn = new SqlConnection(_connectionString))
            {
                conn.Open();

                var query = ModelBaseHelper.CreateTableExistsCode(ModelBaseHelper.GetSchema <T>(), ModelBaseHelper.GetTableName <T>());
                query += "BEGIN\r\n";
                query += ModelBaseHelper.CreateTableCommand <T>() + ")\r\n";
                query += "END";

                SqlCommand cmd = new SqlCommand()
                {
                    Connection = conn, CommandText = query
                };
                cmd.ExecuteNonQuery();

                conn.Close();
            }
        }