Skip to content

Commit 8989c7c

Browse files
author
Scott Bommarito
authored
Allow bulk inserts/deletes through EntitiesContext/EntityRepository (#6902)
1 parent e92740c commit 8989c7c

11 files changed

Lines changed: 145 additions & 227 deletions

File tree

src/NuGetGallery.Core/Entities/EntitiesContext.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,23 +48,23 @@ public EntitiesContext(DbConnection connection, bool readOnly)
4848
}
4949

5050
public bool ReadOnly { get; private set; }
51-
public IDbSet<PackageRegistration> PackageRegistrations { get; set; }
52-
public IDbSet<Credential> Credentials { get; set; }
53-
public IDbSet<Scope> Scopes { get; set; }
54-
public IDbSet<UserSecurityPolicy> UserSecurityPolicies { get; set; }
55-
public IDbSet<ReservedNamespace> ReservedNamespaces { get; set; }
56-
public IDbSet<Certificate> Certificates { get; set; }
57-
public IDbSet<UserCertificate> UserCertificates { get; set; }
58-
public IDbSet<SymbolPackage> SymbolPackages { get; set; }
51+
public DbSet<PackageRegistration> PackageRegistrations { get; set; }
52+
public DbSet<Credential> Credentials { get; set; }
53+
public DbSet<Scope> Scopes { get; set; }
54+
public DbSet<UserSecurityPolicy> UserSecurityPolicies { get; set; }
55+
public DbSet<ReservedNamespace> ReservedNamespaces { get; set; }
56+
public DbSet<Certificate> Certificates { get; set; }
57+
public DbSet<UserCertificate> UserCertificates { get; set; }
58+
public DbSet<SymbolPackage> SymbolPackages { get; set; }
5959

6060
/// <summary>
6161
/// User or organization accounts.
6262
/// </summary>
63-
public IDbSet<User> Users { get; set; }
64-
public IDbSet<Cve> Cves { get; set; }
65-
public IDbSet<Cwe> Cwes { get; set; }
63+
public DbSet<User> Users { get; set; }
64+
public DbSet<Cve> Cves { get; set; }
65+
public DbSet<Cwe> Cwes { get; set; }
6666

67-
IDbSet<T> IEntitiesContext.Set<T>()
67+
DbSet<T> IEntitiesContext.Set<T>()
6868
{
6969
return base.Set<T>();
7070
}
@@ -444,4 +444,4 @@ protected override void OnModelCreating(DbModelBuilder modelBuilder)
444444
}
445445
#pragma warning restore 618
446446
}
447-
}
447+
}

src/NuGetGallery.Core/Entities/EntityRepository.cs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

4+
using System.Collections.Generic;
45
using System.Linq;
56
using System.Threading.Tasks;
67

@@ -22,19 +23,29 @@ public async Task CommitChangesAsync()
2223
await _entities.SaveChangesAsync();
2324
}
2425

26+
public void InsertOnCommit(T entity)
27+
{
28+
_entities.Set<T>().Add(entity);
29+
}
30+
31+
public void InsertOnCommit(IEnumerable<T> entities)
32+
{
33+
_entities.Set<T>().AddRange(entities);
34+
}
35+
2536
public void DeleteOnCommit(T entity)
2637
{
2738
_entities.Set<T>().Remove(entity);
2839
}
2940

30-
public IQueryable<T> GetAll()
41+
public void DeleteOnCommit(IEnumerable<T> entities)
3142
{
32-
return _entities.Set<T>();
43+
_entities.Set<T>().RemoveRange(entities);
3344
}
3445

35-
public void InsertOnCommit(T entity)
46+
public IQueryable<T> GetAll()
3647
{
37-
_entities.Set<T>().Add(entity);
48+
return _entities.Set<T>();
3849
}
3950
}
4051
}

src/NuGetGallery.Core/Entities/IEntitiesContext.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,20 @@ namespace NuGetGallery
99
{
1010
public interface IEntitiesContext
1111
{
12-
IDbSet<Certificate> Certificates { get; set; }
13-
IDbSet<PackageRegistration> PackageRegistrations { get; set; }
14-
IDbSet<Credential> Credentials { get; set; }
15-
IDbSet<Scope> Scopes { get; set; }
16-
IDbSet<User> Users { get; set; }
17-
IDbSet<UserSecurityPolicy> UserSecurityPolicies { get; set; }
18-
IDbSet<ReservedNamespace> ReservedNamespaces { get; set; }
19-
IDbSet<UserCertificate> UserCertificates { get; set; }
20-
IDbSet<SymbolPackage> SymbolPackages { get; set; }
21-
IDbSet<Cve> Cves { get; set; }
22-
IDbSet<Cwe> Cwes { get; set; }
12+
DbSet<Certificate> Certificates { get; set; }
13+
DbSet<PackageRegistration> PackageRegistrations { get; set; }
14+
DbSet<Credential> Credentials { get; set; }
15+
DbSet<Scope> Scopes { get; set; }
16+
DbSet<User> Users { get; set; }
17+
DbSet<UserSecurityPolicy> UserSecurityPolicies { get; set; }
18+
DbSet<ReservedNamespace> ReservedNamespaces { get; set; }
19+
DbSet<UserCertificate> UserCertificates { get; set; }
20+
DbSet<SymbolPackage> SymbolPackages { get; set; }
21+
DbSet<Cve> Cves { get; set; }
22+
DbSet<Cwe> Cwes { get; set; }
2323

2424
Task<int> SaveChangesAsync();
25-
IDbSet<T> Set<T>() where T : class;
25+
DbSet<T> Set<T>() where T : class;
2626
void DeleteOnCommit<T>(T entity) where T : class;
2727
void SetCommandTimeout(int? seconds);
2828
IDatabase GetDatabase();

src/NuGetGallery.Core/Entities/IEntityRepository.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

4+
using System.Collections.Generic;
45
using System.Linq;
56
using System.Threading.Tasks;
67

@@ -10,8 +11,10 @@ public interface IEntityRepository<T>
1011
where T : class, new()
1112
{
1213
Task CommitChangesAsync();
14+
void InsertOnCommit(T entity);
15+
void InsertOnCommit(IEnumerable<T> entities);
1316
void DeleteOnCommit(T entity);
17+
void DeleteOnCommit(IEnumerable<T> entities);
1418
IQueryable<T> GetAll();
15-
void InsertOnCommit(T entity);
1619
}
1720
}

src/NuGetGallery/Areas/Admin/Services/ValidationEntityRepository.cs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

4+
using System.Collections.Generic;
45
using System.Linq;
56
using System.Threading.Tasks;
67
using NuGet.Services.Validation;
@@ -22,19 +23,29 @@ public async Task CommitChangesAsync()
2223
await _entities.SaveChangesAsync();
2324
}
2425

26+
public void InsertOnCommit(T entity)
27+
{
28+
_entities.Set<T>().Add(entity);
29+
}
30+
31+
public void InsertOnCommit(IEnumerable<T> entities)
32+
{
33+
_entities.Set<T>().AddRange(entities);
34+
}
35+
2536
public void DeleteOnCommit(T entity)
2637
{
2738
_entities.Set<T>().Remove(entity);
2839
}
2940

30-
public IQueryable<T> GetAll()
41+
public void DeleteOnCommit(IEnumerable<T> entities)
3142
{
32-
return _entities.Set<T>();
43+
_entities.Set<T>().RemoveRange(entities);
3344
}
3445

35-
public void InsertOnCommit(T entity)
46+
public IQueryable<T> GetAll()
3647
{
37-
_entities.Set<T>().Add(entity);
48+
return _entities.Set<T>();
3849
}
3950
}
4051
}

tests/NuGetGallery.Facts/NuGetGallery.Facts.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,6 @@
258258
<Compile Include="Services\UserServiceFacts.cs" />
259259
<Compile Include="Services\FeedServiceFacts.cs" />
260260
<Compile Include="TestUtils\ContractAssert.cs" />
261-
<Compile Include="TestUtils\FakeDbSet.cs" />
262261
<Compile Include="TestUtils\FakeEntitiesContext.cs" />
263262
<Compile Include="TestUtils\MockExtensions.cs" />
264263
<Compile Include="TestUtils\MockHandler.cs" />

tests/NuGetGallery.Facts/Security/TestSecurityPolicyService.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ public class TestSecurityPolicyService : SecurityPolicyService
2121

2222
public IAppConfiguration AppConfiguration { get; }
2323

24-
public Mock<IDbSet<UserSecurityPolicy>> MockUserSecurityPolicies { get; }
25-
24+
public Mock<DbSet<UserSecurityPolicy>> MockUserSecurityPolicies { get; }
25+
2626
public TestUserSecurityPolicyData Mocks { get; }
2727

2828
public override IEnumerable<IUserSecurityPolicySubscription> Subscriptions { get; }
@@ -42,7 +42,7 @@ public TestSecurityPolicyService(
4242
Mocks = mocks ?? new TestUserSecurityPolicyData();
4343

4444
UserHandlers = userHandlers ?? Mocks.Handlers.Select(m => m.Object);
45-
Subscriptions = userSubscriptions ?? new [] { Mocks.UserPoliciesSubscription.Object };
45+
Subscriptions = userSubscriptions ?? new[] { Mocks.UserPoliciesSubscription.Object };
4646
DefaultSubscription = Mocks.DefaultSubscription.Object;
4747
}
4848

@@ -51,7 +51,7 @@ protected TestSecurityPolicyService(
5151
Mock<IAuditingService> mockAuditing,
5252
IAppConfiguration configuration)
5353
{
54-
MockUserSecurityPolicies = new Mock<IDbSet<UserSecurityPolicy>>();
54+
MockUserSecurityPolicies = new Mock<DbSet<UserSecurityPolicy>>();
5555
MockUserSecurityPolicies.Setup(p => p.Remove(It.IsAny<UserSecurityPolicy>())).Verifiable();
5656

5757
MockEntitiesContext = mockEntities ?? new Mock<IEntitiesContext>();
@@ -75,4 +75,4 @@ protected TestSecurityPolicyService(
7575
Diagnostics = new DiagnosticsService().GetSource(nameof(TestSecurityPolicyService));
7676
}
7777
}
78-
}
78+
}

tests/NuGetGallery.Facts/Services/CertificateServiceFacts.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ public async Task ActivateCertificateAsync_WhenCertificateAlreadyExistsInEntitie
309309
_certificateRepository.Setup(x => x.GetAll())
310310
.Returns(new EnumerableQuery<Certificate>(new[] { _certificate }));
311311

312-
var userCertificates = new Mock<IDbSet<UserCertificate>>(MockBehavior.Strict);
312+
var userCertificates = new Mock<DbSet<UserCertificate>>(MockBehavior.Strict);
313313
var userCertificate = new UserCertificate()
314314
{
315315
Key = 7,

tests/NuGetGallery.Facts/Services/SupportRequestServiceFacts.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public async Task DeleteRequestsNormalPath()
9191
supportRequestContext.Issues.Add(randomIssue);
9292

9393
var auditingService = new Mock<IAuditingService>();
94-
SupportRequestService supportRequestService = new SupportRequestService(supportRequestContext, GetAppConfig(),auditingService.Object);
94+
SupportRequestService supportRequestService = new SupportRequestService(supportRequestContext, GetAppConfig(), auditingService.Object);
9595

9696
// Act
9797
await supportRequestService.DeleteSupportRequestsAsync(user);
@@ -150,16 +150,16 @@ internal class TestSupportRequestDbContext : ISupportRequestDbContext
150150
{
151151
public TestSupportRequestDbContext()
152152
{
153-
Admins = new FakeDbSet<Admin>(new FakeEntitiesContext());
154-
Issues = new FakeDbSet<Issue>(new FakeEntitiesContext());
155-
Histories = new FakeDbSet<History>(new FakeEntitiesContext());
156-
IssueStatus = new FakeDbSet<IssueStatus>(new FakeEntitiesContext());
153+
Admins = FakeEntitiesContext.CreateDbSet<Admin>();
154+
Issues = FakeEntitiesContext.CreateDbSet<Issue>();
155+
Histories = FakeEntitiesContext.CreateDbSet<History>();
156+
IssueStatus = FakeEntitiesContext.CreateDbSet<IssueStatus>();
157157
}
158158

159159
public IDbSet<Admin> Admins { get; set; }
160-
public IDbSet<Issue> Issues { get; set; }
161-
public IDbSet<History> Histories { get; set; }
162-
public IDbSet<IssueStatus> IssueStatus { get; set; }
160+
public IDbSet<Issue> Issues { get; set; }
161+
public IDbSet<History> Histories { get; set; }
162+
public IDbSet<IssueStatus> IssueStatus { get; set; }
163163

164164
public async Task CommitChangesAsync()
165165
{
@@ -168,4 +168,4 @@ public async Task CommitChangesAsync()
168168
}
169169
}
170170
}
171-
}
171+
}

0 commit comments

Comments
 (0)