Skip to content

Commit e3a8941

Browse files
committed
concurrency handling
1 parent ac413f3 commit e3a8941

File tree

12 files changed

+69
-6
lines changed

12 files changed

+69
-6
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System;
2+
3+
namespace ClassifiedAds.Domain.Repositories
4+
{
5+
public interface IConcurrencyHandler<TEntity>
6+
{
7+
void SetRowVersion(TEntity entity, byte[] version);
8+
9+
bool IsDbUpdateConcurrencyException(Exception ex);
10+
}
11+
}

src/Microservices/Common/ClassifiedAds.Domain/Repositories/IRepository.cs

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

99
namespace ClassifiedAds.Domain.Repositories
1010
{
11-
public interface IRepository<TEntity, TKey>
11+
public interface IRepository<TEntity, TKey> : IConcurrencyHandler<TEntity>
1212
where TEntity : AggregateRoot<TKey>
1313
{
1414
IUnitOfWork UnitOfWork { get; }

src/Microservices/Common/ClassifiedAds.Infrastructure/ClassifiedAds.Infrastructure.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
<PackageReference Include="DinkToPdf" Version="1.0.8" />
4141
<PackageReference Include="Google.Protobuf" Version="3.19.1" />
4242
<PackageReference Include="Grpc.Net.Client" Version="2.40.0" />
43-
<PackageReference Include="EntityFrameworkCore.SqlServer.SimpleBulks" Version="6.4.0" />
43+
<PackageReference Include="EntityFrameworkCore.SqlServer.SimpleBulks" Version="6.5.0" />
4444
<PackageReference Include="IdentityModel" Version="5.2.0" />
4545
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.19.0" />
4646
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.0" />

src/Microservices/Common/ClassifiedAds.Infrastructure/Persistence/DbContextRepository.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,5 +111,15 @@ public void BulkMerge(IEnumerable<TEntity> entities, Expression<Func<TEntity, ob
111111
{
112112
_dbContext.BulkMerge(entities, idSelector, updateColumnNamesSelector, insertColumnNamesSelector);
113113
}
114+
115+
public void SetRowVersion(TEntity entity, byte[] version)
116+
{
117+
_dbContext.Entry(entity).OriginalValues[nameof(entity.RowVersion)] = version;
118+
}
119+
120+
public bool IsDbUpdateConcurrencyException(Exception ex)
121+
{
122+
return ex is DbUpdateConcurrencyException;
123+
}
114124
}
115125
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System;
2+
3+
namespace ClassifiedAds.Domain.Repositories
4+
{
5+
public interface IConcurrencyHandler<TEntity>
6+
{
7+
void SetRowVersion(TEntity entity, byte[] version);
8+
9+
bool IsDbUpdateConcurrencyException(Exception ex);
10+
}
11+
}

src/ModularMonolith/ClassifiedAds.Domain/Repositories/IRepository.cs

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

99
namespace ClassifiedAds.Domain.Repositories
1010
{
11-
public interface IRepository<TEntity, TKey>
11+
public interface IRepository<TEntity, TKey> : IConcurrencyHandler<TEntity>
1212
where TEntity : AggregateRoot<TKey>
1313
{
1414
IUnitOfWork UnitOfWork { get; }

src/ModularMonolith/ClassifiedAds.Infrastructure/ClassifiedAds.Infrastructure.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
<PackageReference Include="CsvHelper" Version="27.2.0" />
3939
<PackageReference Include="Dapper.StrongName" Version="2.0.123" />
4040
<PackageReference Include="DinkToPdf" Version="1.0.8" />
41-
<PackageReference Include="EntityFrameworkCore.SqlServer.SimpleBulks" Version="6.4.0" />
41+
<PackageReference Include="EntityFrameworkCore.SqlServer.SimpleBulks" Version="6.5.0" />
4242
<PackageReference Include="IdentityModel" Version="5.2.0" />
4343
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.19.0" />
4444
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.0" />

src/ModularMonolith/ClassifiedAds.Infrastructure/Persistence/DbContextRepository.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,5 +111,15 @@ public void BulkMerge(IEnumerable<TEntity> entities, Expression<Func<TEntity, ob
111111
{
112112
_dbContext.BulkMerge(entities, idSelector, updateColumnNamesSelector, insertColumnNamesSelector);
113113
}
114+
115+
public void SetRowVersion(TEntity entity, byte[] version)
116+
{
117+
_dbContext.Entry(entity).OriginalValues[nameof(entity.RowVersion)] = version;
118+
}
119+
120+
public bool IsDbUpdateConcurrencyException(Exception ex)
121+
{
122+
return ex is DbUpdateConcurrencyException;
123+
}
114124
}
115125
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System;
2+
3+
namespace ClassifiedAds.Domain.Repositories
4+
{
5+
public interface IConcurrencyHandler<TEntity>
6+
{
7+
void SetRowVersion(TEntity entity, byte[] version);
8+
9+
bool IsDbUpdateConcurrencyException(Exception ex);
10+
}
11+
}

src/Monolith/ClassifiedAds.Domain/Repositories/IRepository.cs

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

99
namespace ClassifiedAds.Domain.Repositories
1010
{
11-
public interface IRepository<TEntity, TKey>
11+
public interface IRepository<TEntity, TKey> : IConcurrencyHandler<TEntity>
1212
where TEntity : AggregateRoot<TKey>
1313
{
1414
IUnitOfWork UnitOfWork { get; }

0 commit comments

Comments
 (0)