diff --git a/src/Thinktecture.EntityFrameworkCore.BulkOperations/EntityFrameworkCore/BulkOperations/ITempTableBulkInsertOptions.cs b/src/Thinktecture.EntityFrameworkCore.BulkOperations/EntityFrameworkCore/BulkOperations/ITempTableBulkInsertOptions.cs
index d1d02f9e..0c037bb8 100644
--- a/src/Thinktecture.EntityFrameworkCore.BulkOperations/EntityFrameworkCore/BulkOperations/ITempTableBulkInsertOptions.cs
+++ b/src/Thinktecture.EntityFrameworkCore.BulkOperations/EntityFrameworkCore/BulkOperations/ITempTableBulkInsertOptions.cs
@@ -39,4 +39,9 @@ public interface ITempTableBulkInsertOptions
/// Gets properties to insert.
///
IEntityPropertiesProvider? PropertiesToInsert { get; }
+
+ ///
+ /// For temptable creation we should not use defaults
+ ///
+ bool DoNotUseDefaultValues { get; }
}
diff --git a/src/Thinktecture.EntityFrameworkCore.BulkOperations/EntityFrameworkCore/TempTables/ITempTableCreationOptions.cs b/src/Thinktecture.EntityFrameworkCore.BulkOperations/EntityFrameworkCore/TempTables/ITempTableCreationOptions.cs
index 512bd428..493c39b5 100644
--- a/src/Thinktecture.EntityFrameworkCore.BulkOperations/EntityFrameworkCore/TempTables/ITempTableCreationOptions.cs
+++ b/src/Thinktecture.EntityFrameworkCore.BulkOperations/EntityFrameworkCore/TempTables/ITempTableCreationOptions.cs
@@ -43,4 +43,9 @@ public interface ITempTableCreationOptions
/// Set to true on re-use.
///
bool DropTableOnDispose { get; }
+
+ ///
+ /// For temptable creation we should not use defaults
+ ///
+ bool DoNotUseDefaultValues { get; }
}
diff --git a/src/Thinktecture.EntityFrameworkCore.BulkOperations/EntityFrameworkCore/TempTables/TempTableCreationOptions.cs b/src/Thinktecture.EntityFrameworkCore.BulkOperations/EntityFrameworkCore/TempTables/TempTableCreationOptions.cs
index 41695f90..80cbdafe 100644
--- a/src/Thinktecture.EntityFrameworkCore.BulkOperations/EntityFrameworkCore/TempTables/TempTableCreationOptions.cs
+++ b/src/Thinktecture.EntityFrameworkCore.BulkOperations/EntityFrameworkCore/TempTables/TempTableCreationOptions.cs
@@ -37,6 +37,9 @@ public IPrimaryKeyPropertiesProvider PrimaryKeyCreation
///
public bool DropTableOnDispose { get; set; }
+ ///
+ public bool DoNotUseDefaultValues { get; set; }
+
///
/// Initializes a new instance of .
///
@@ -46,6 +49,7 @@ public TempTableCreationOptions(ITempTableCreationOptions? options = null)
if (options is null)
{
DropTableOnDispose = true;
+ DoNotUseDefaultValues = true;
}
else
{
@@ -60,5 +64,6 @@ private void InitializeFrom(ITempTableCreationOptions options)
TruncateTableIfExists = options.TruncateTableIfExists;
PropertiesToInclude = options.PropertiesToInclude;
DropTableOnDispose = options.DropTableOnDispose;
+ DoNotUseDefaultValues = options.DoNotUseDefaultValues;
}
}
diff --git a/src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/BulkOperations/SqlServerBulkOperationTempTableOptions.cs b/src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/BulkOperations/SqlServerBulkOperationTempTableOptions.cs
index 920d2061..fb0c85a3 100644
--- a/src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/BulkOperations/SqlServerBulkOperationTempTableOptions.cs
+++ b/src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/BulkOperations/SqlServerBulkOperationTempTableOptions.cs
@@ -17,6 +17,7 @@ internal SqlServerBulkOperationTempTableOptions(SqlServerBulkOperationTempTableO
MomentOfPrimaryKeyCreation = MomentOfSqlServerPrimaryKeyCreation.AfterBulkInsert;
DropTableOnDispose = true;
EnableStreaming = true;
+ DoNotUseDefaultValues = true;
}
else
{
@@ -31,6 +32,7 @@ internal SqlServerBulkOperationTempTableOptions(SqlServerBulkOperationTempTableO
BatchSize = options.BatchSize;
EnableStreaming = options.EnableStreaming;
UseDefaultDatabaseCollation = options.UseDefaultDatabaseCollation;
+ DoNotUseDefaultValues = options.DoNotUseDefaultValues;
}
}
@@ -94,6 +96,11 @@ internal SqlServerBulkOperationTempTableOptions(SqlServerBulkOperationTempTableO
///
public bool UseDefaultDatabaseCollation { get; set; }
+ ///
+ /// Do not use default values
+ ///
+ public bool DoNotUseDefaultValues { get; set; }
+
internal void Populate(SqlServerTempTableBulkInsertOptions options)
{
options.BatchSize = BatchSize;
@@ -106,5 +113,6 @@ internal void Populate(SqlServerTempTableBulkInsertOptions options)
options.SqlBulkCopyOptions = SqlBulkCopyOptions;
options.UseDefaultDatabaseCollation = UseDefaultDatabaseCollation;
options.MomentOfPrimaryKeyCreation = MomentOfPrimaryKeyCreation;
+ options.DoNotUseDefaultValues = DoNotUseDefaultValues;
}
}
diff --git a/src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/BulkOperations/SqlServerTempTableBulkOperationOptions.cs b/src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/BulkOperations/SqlServerTempTableBulkOperationOptions.cs
index 1d6a0743..4d3b9adf 100644
--- a/src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/BulkOperations/SqlServerTempTableBulkOperationOptions.cs
+++ b/src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/BulkOperations/SqlServerTempTableBulkOperationOptions.cs
@@ -1,5 +1,6 @@
using System.Data;
using Microsoft.Data.SqlClient;
+using Microsoft.Extensions.Options;
using Thinktecture.EntityFrameworkCore.TempTables;
namespace Thinktecture.EntityFrameworkCore.BulkOperations;
@@ -61,6 +62,10 @@ public abstract class SqlServerTempTableBulkOperationOptions : ITempTableBulkIns
///
public AdvancedSqlServerTempTableBulkOperationOptions Advanced { get; }
+ ///
+ public bool DoNotUseDefaultValues { get; set; }
+
+
///
/// Initializes new instance of .
///
@@ -74,6 +79,7 @@ protected SqlServerTempTableBulkOperationOptions(ITempTableBulkInsertOptions? op
DropTableOnDispose = true;
MomentOfPrimaryKeyCreation = MomentOfSqlServerPrimaryKeyCreation.AfterBulkInsert;
EnableStreaming = true;
+ DoNotUseDefaultValues = true;
}
else
{
@@ -82,6 +88,7 @@ protected SqlServerTempTableBulkOperationOptions(ITempTableBulkInsertOptions? op
TableNameProvider = optionsToInitializeFrom.TableNameProvider;
PrimaryKeyCreation = optionsToInitializeFrom.PrimaryKeyCreation;
PropertiesToInsert = optionsToInitializeFrom.PropertiesToInsert;
+ DoNotUseDefaultValues = optionsToInitializeFrom.DoNotUseDefaultValues;
if (optionsToInitializeFrom is SqlServerTempTableBulkOperationOptions sqlServerOptions)
{
@@ -94,6 +101,7 @@ protected SqlServerTempTableBulkOperationOptions(ITempTableBulkInsertOptions? op
MomentOfPrimaryKeyCreation = sqlServerOptions.MomentOfPrimaryKeyCreation;
Advanced.UsePropertiesToInsertForTempTableCreation = sqlServerOptions.Advanced.UsePropertiesToInsertForTempTableCreation;
+ DoNotUseDefaultValues = sqlServerOptions.DoNotUseDefaultValues;
}
}
}
diff --git a/src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/TempTables/SqlServerTempTableCreator.cs b/src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/TempTables/SqlServerTempTableCreator.cs
index 568e655a..e25c5348 100644
--- a/src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/TempTables/SqlServerTempTableCreator.cs
+++ b/src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/TempTables/SqlServerTempTableCreator.cs
@@ -251,6 +251,12 @@ private string GetColumnsDefinitions(SqlServerTempTableCreatorCacheKey options)
sb.Append(property.Property.IsNullable ? " NULL" : " NOT NULL");
+ if (options.DoNotUseDefaultValues)
+ {
+ isFirst = false;
+ continue;
+ }
+
if (IsIdentityColumn(property))
sb.Append(" IDENTITY");
diff --git a/src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/TempTables/SqlServerTempTableCreatorCacheKey.cs b/src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/TempTables/SqlServerTempTableCreatorCacheKey.cs
index 1ae81092..9cc07464 100644
--- a/src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/TempTables/SqlServerTempTableCreatorCacheKey.cs
+++ b/src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/TempTables/SqlServerTempTableCreatorCacheKey.cs
@@ -25,6 +25,11 @@ public readonly struct SqlServerTempTableCreatorCacheKey
///
public IReadOnlyCollection PrimaryKeys { get; }
+ ///
+ /// Do not use default values when we create a temp dable
+ ///
+ public bool DoNotUseDefaultValues { get; }
+
///
/// Initializes new instance of .
///
@@ -38,6 +43,7 @@ public SqlServerTempTableCreatorCacheKey(
UseDefaultDatabaseCollation = options.UseDefaultDatabaseCollation;
Properties = options.PropertiesToInclude.DeterminePropertiesForTempTable(entityType, true);
PrimaryKeys = options.PrimaryKeyCreation.GetPrimaryKeyProperties(entityType, Properties);
+ DoNotUseDefaultValues = options.DoNotUseDefaultValues;
}
///
@@ -46,7 +52,9 @@ public bool Equals(SqlServerTempTableCreatorCacheKey other)
return TruncateTableIfExists == other.TruncateTableIfExists &&
UseDefaultDatabaseCollation == other.UseDefaultDatabaseCollation &&
Properties.AreEqual(other.Properties) &&
- PrimaryKeys.AreEqual(other.PrimaryKeys);
+ PrimaryKeys.AreEqual(other.PrimaryKeys)
+ && DoNotUseDefaultValues == other.DoNotUseDefaultValues
+ ;
}
///
@@ -65,6 +73,8 @@ public override int GetHashCode()
Properties.ComputeHashCode(hashCode);
PrimaryKeys.ComputeHashCode(hashCode);
+ hashCode.Add(DoNotUseDefaultValues);
+
return hashCode.ToHashCode();
}
}
diff --git a/src/Thinktecture.EntityFrameworkCore.Sqlite/EntityFrameworkCore/BulkOperations/SqliteTempTableBulkInsertOptions.cs b/src/Thinktecture.EntityFrameworkCore.Sqlite/EntityFrameworkCore/BulkOperations/SqliteTempTableBulkInsertOptions.cs
index dd7f0a31..04504662 100644
--- a/src/Thinktecture.EntityFrameworkCore.Sqlite/EntityFrameworkCore/BulkOperations/SqliteTempTableBulkInsertOptions.cs
+++ b/src/Thinktecture.EntityFrameworkCore.Sqlite/EntityFrameworkCore/BulkOperations/SqliteTempTableBulkInsertOptions.cs
@@ -34,6 +34,9 @@ public sealed class SqliteTempTableBulkInsertOptions : ITempTableBulkInsertOptio
///
public AdvancedSqliteTempTableBulkInsertOptions Advanced { get; }
+ ///
+ public bool DoNotUseDefaultValues { get; set; }
+
///
/// Initializes new instance of .
///