Skip to content

Commit 2b70c29

Browse files
committed
Ctor-Overload for SqlServerBulkInsertOrUpdateOptions to specify whether HoldLock is desired or not.
1 parent e1b478a commit 2b70c29

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<Copyright>(c) $([System.DateTime]::Now.Year), Pawel Gerr. All rights reserved.</Copyright>
5-
<VersionPrefix>7.0.0</VersionPrefix>
5+
<VersionPrefix>7.1.0</VersionPrefix>
66
<Authors>Pawel Gerr</Authors>
77
<GenerateDocumentationFile>true</GenerateDocumentationFile>
88
<PackageProjectUrl>https://dev.azure.com/pawelgerr/Thinktecture.EntityFrameworkCore</PackageProjectUrl>

src/Thinktecture.EntityFrameworkCore.SqlServer/EntityFrameworkCore/BulkOperations/SqlServerBulkInsertOrUpdateOptions.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,27 @@ public sealed class SqlServerBulkInsertOrUpdateOptions : ISqlServerMergeOperatio
2222
/// <inheritdoc />
2323
public SqlServerBulkOperationTempTableOptions TempTableOptions { get; }
2424

25+
/// <summary>
26+
/// Initializes new instance of <see cref="SqlServerBulkUpdateOptions"/>.
27+
/// </summary>
28+
/// <param name="holdLockDuringMerge">Indication, whether the table hint <see cref="SqlServerTableHintLimited.HoldLock"/> should be used with 'MERGE' or not.</param>
29+
public SqlServerBulkInsertOrUpdateOptions(bool holdLockDuringMerge)
30+
: this(null, holdLockDuringMerge)
31+
{
32+
}
33+
2534
/// <summary>
2635
/// Initializes new instance of <see cref="SqlServerBulkUpdateOptions"/>.
2736
/// </summary>
2837
/// <param name="optionsToInitializeFrom">Options to initialize from.</param>
2938
public SqlServerBulkInsertOrUpdateOptions(IBulkInsertOrUpdateOptions? optionsToInitializeFrom = null)
39+
: this(optionsToInitializeFrom, optionsToInitializeFrom is null)
40+
{
41+
}
42+
43+
private SqlServerBulkInsertOrUpdateOptions(
44+
IBulkInsertOrUpdateOptions? optionsToInitializeFrom,
45+
bool holdLockDuringMerge)
3046
{
3147
if (optionsToInitializeFrom is not null)
3248
{
@@ -39,14 +55,20 @@ public SqlServerBulkInsertOrUpdateOptions(IBulkInsertOrUpdateOptions? optionsToI
3955
{
4056
TempTableOptions = new SqlServerBulkOperationTempTableOptions(mergeOptions.TempTableOptions);
4157
MergeTableHints = mergeOptions.MergeTableHints.ToList();
58+
59+
if (holdLockDuringMerge && !MergeTableHints.Contains(SqlServerTableHintLimited.HoldLock))
60+
MergeTableHints.Add(SqlServerTableHintLimited.HoldLock);
4261
}
4362
else
4463
{
4564
TempTableOptions = new SqlServerBulkOperationTempTableOptions
4665
{
4766
SqlBulkCopyOptions = SqlBulkCopyOptions.KeepIdentity
4867
};
49-
MergeTableHints = new List<SqlServerTableHintLimited> { SqlServerTableHintLimited.HoldLock };
68+
MergeTableHints = new List<SqlServerTableHintLimited>();
69+
70+
if (holdLockDuringMerge)
71+
MergeTableHints.Add(SqlServerTableHintLimited.HoldLock);
5072
}
5173
}
5274

0 commit comments

Comments
 (0)