예제 #1
0
        public void TestBinaryBulkDeleteByKeyViaPhysicalTable()
        {
            using (var connection = GetConnection())
            {
                // Prepare
                var entities    = Helper.CreateBulkOperationLightIdentityTables(10, true);
                var primaryKeys = entities.Select(entity => entity.Id);
                var tableName   = "BulkOperationIdentityTable";

                // Act
                var result = NpgsqlConnectionExtension.BinaryBulkInsert <BulkOperationLightIdentityTable>(connection,
                                                                                                          tableName,
                                                                                                          entities: entities,
                                                                                                          identityBehavior: BulkImportIdentityBehavior.KeepIdentity);

                // Act
                result = NpgsqlConnectionExtension.BinaryBulkDeleteByKey(connection,
                                                                         tableName,
                                                                         primaryKeys: primaryKeys,
                                                                         pseudoTableType: BulkImportPseudoTableType.Physical);

                // Assert
                Assert.AreEqual(entities.Count(), result);

                // Assert
                var countResult = connection.CountAll(tableName);
                Assert.AreEqual(0, countResult);
            }
        }
예제 #2
0
            /// <summary>
            ///
            /// </summary>
            /// <param name="tableName"></param>
            /// <param name="dbFields"></param>
            /// <param name="properties"></param>
            /// <param name="entityType"></param>
            /// <param name="identityBehavior"></param>
            /// <param name="dbSetting"></param>
            /// <returns></returns>
            public static Action <NpgsqlBinaryImporter, TEntity> Get(string tableName,
                                                                     IEnumerable <DbField> dbFields,
                                                                     IEnumerable <ClassProperty> properties,
                                                                     Type entityType,
                                                                     BulkImportIdentityBehavior identityBehavior,
                                                                     IDbSetting dbSetting = null)
            {
                var includeIdentity     = (identityBehavior == BulkImportIdentityBehavior.KeepIdentity);
                var primaryDbField      = dbFields?.FirstOrDefault(dbField => dbField.IsPrimary);
                var isPrimaryAnIdentity = primaryDbField?.IsIdentity == true;
                var includePrimary      = isPrimaryAnIdentity == false ||
                                          (isPrimaryAnIdentity && identityBehavior == BulkImportIdentityBehavior.KeepIdentity);
                var matchedProperties = NpgsqlConnectionExtension.GetMatchedProperties(dbFields,
                                                                                       properties,
                                                                                       includePrimary,
                                                                                       includeIdentity,
                                                                                       dbSetting);
                var mappings = matchedProperties.Select(property =>
                                                        new NpgsqlBulkInsertMapItem(property.PropertyInfo.Name, property.GetMappedName()));

                return(GetFunc(tableName, mappings, entityType));
            }