diff --git a/src/PhenX.EntityFrameworkCore.BulkInsert.SqlServer/SqlServerBulkInsertProvider.cs b/src/PhenX.EntityFrameworkCore.BulkInsert.SqlServer/SqlServerBulkInsertProvider.cs
index 3f9956b..b4d1e18 100644
--- a/src/PhenX.EntityFrameworkCore.BulkInsert.SqlServer/SqlServerBulkInsertProvider.cs
+++ b/src/PhenX.EntityFrameworkCore.BulkInsert.SqlServer/SqlServerBulkInsertProvider.cs
@@ -44,7 +44,7 @@ CancellationToken ctk
using var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.TableLock, sqlTransaction);
bulkCopy.DestinationTableName = tableName;
bulkCopy.BatchSize = options.BatchSize ?? 50_000;
- bulkCopy.BulkCopyTimeout = 60;
+ bulkCopy.BulkCopyTimeout = options.GetCopyTimeoutInSeconds();
foreach (var prop in properties)
{
diff --git a/src/PhenX.EntityFrameworkCore.BulkInsert/Options/BulkInsertOptions.cs b/src/PhenX.EntityFrameworkCore.BulkInsert/Options/BulkInsertOptions.cs
index cda5241..e42cd1a 100644
--- a/src/PhenX.EntityFrameworkCore.BulkInsert/Options/BulkInsertOptions.cs
+++ b/src/PhenX.EntityFrameworkCore.BulkInsert/Options/BulkInsertOptions.cs
@@ -1,4 +1,4 @@
-namespace PhenX.EntityFrameworkCore.BulkInsert.Options;
+namespace PhenX.EntityFrameworkCore.BulkInsert.Options;
///
/// Bulk insert general options.
@@ -32,4 +32,14 @@ public class BulkInsertOptions
///
///
public int? BatchSize { get; set; }
+
+ ///
+ /// The timeout to copy records.
+ ///
+ public TimeSpan CopyTimeout = TimeSpan.FromMinutes(10);
+
+ internal int GetCopyTimeoutInSeconds()
+ {
+ return Math.Max(0, (int)CopyTimeout.TotalSeconds);
+ }
}