diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 545c966..d1d20cd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,7 +5,7 @@ on: release: types: - published - + env: # Stop wasting time caching packages DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true @@ -15,42 +15,33 @@ env: GITHUB_FEED: https://nuget.pkg.github.com/koenbeuk/ GITHUB_USER: koenbeuk GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - + jobs: build: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] - version: [1, 2, 3] - include: - - version: 1 - configuration: ReleaseV1 - - version: 2 - configuration: ReleaseV2 - - version: 3 - configuration: Release - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Setup .NET Core - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v4 with: - dotnet-version: 6.0.x - include-prerelease: True + global-json-file: global.json - name: Install dependencies - run: dotnet restore EntityFrameworkCore.Triggered.sln -p:Configuration=${{ matrix.configuration }} + run: dotnet restore EntityFrameworkCore.Triggered.sln -p:Configuration=Release - name: Build - run: dotnet build --configuration ${{ matrix.configuration }} --no-restore EntityFrameworkCore.Triggered.sln + run: dotnet build --configuration Release --no-restore EntityFrameworkCore.Triggered.sln - name: Test - run: dotnet test --configuration ${{ matrix.configuration }} --verbosity normal EntityFrameworkCore.Triggered.sln + run: dotnet test --configuration Release --verbosity normal EntityFrameworkCore.Triggered.sln - name: Pack if: matrix.os == 'ubuntu-latest' - run: | - dotnet pack -v normal --configuration ${{ matrix.configuration }} --include-symbols --include-source -p:PackageVersion=${{ matrix.version }}-pre-$GITHUB_RUN_ID -o nupkg EntityFrameworkCore.Triggered.Core.slnf + run: | + dotnet pack -v normal --configuration Release --include-symbols --include-source -p:PackageVersion=3-pre-$GITHUB_RUN_ID -o nupkg EntityFrameworkCore.Triggered.Core.slnf - name: Upload Artifact if: matrix.os == 'ubuntu-latest' - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: nupkg path: ./nupkg/*.nupkg @@ -59,32 +50,32 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] - runs-on: ${{ matrix.os }} - + runs-on: ${{ matrix.os }} + steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Setup .NET Core - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v4 with: - dotnet-version: 6.0.x - include-prerelease: True + global-json-file: global.json - name: Install dependencies run: dotnet restore EntityFrameworkCore.Triggered.Samples.slnf - name: Build - run: dotnet build --configuration Release --no-restore EntityFrameworkCore.Triggered.Samples.slnf - + run: dotnet build --configuration Release --no-restore EntityFrameworkCore.Triggered.Samples.slnf + prerelease: needs: build - if: github.ref == 'refs/heads/master' + if: github.ref == 'refs/heads/main' runs-on: ubuntu-latest steps: - name: Download Artifact - uses: actions/download-artifact@v1 + uses: actions/download-artifact@v4 with: name: nupkg + path: nupkg - name: Push to GitHub Feed run: | for f in ./nupkg/*.nupkg do dotnet nuget push $f --source $GITHUB_FEED --api-key ${{github.token}} --skip-duplicate --no-symbols - done + done \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3bde8a6..a5a720a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,7 +3,7 @@ on: release: types: - published - + env: # Stop wasting time caching packages DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true @@ -16,27 +16,24 @@ env: # Official NuGet Feed settings NUGET_FEED: https://api.nuget.org/v3/index.json NUGET_KEY: ${{ secrets.NUGET_KEY }} - + jobs: deploy: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Setup .NET Core - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v4 with: - dotnet-version: 6.0.x + global-json-file: global.json - name: Create Release NuGet package run: | arrTag=(${GITHUB_REF//\// }) VERSION="${arrTag[2]}" echo Version: $VERSION - CONFIGURATION=$([ "${VERSION:0:2}" == "v1" ] && echo "ReleaseV1" || echo "Release") - CONFIGURATION=$([ "${VERSION:0:2}" == "v2" ] && echo "ReleaseV2" || echo $CONFIGURATION) VERSION="${VERSION:1}" echo Clean Version: $VERSION - echo Configuration: $CONFIGURATION - dotnet pack -v normal -c $CONFIGURATION --include-symbols --include-source -p:PackageVersion=$VERSION -o nupkg EntityFrameworkCore.Triggered.Core.slnf + dotnet pack -v normal -c Release --include-symbols --include-source -p:PackageVersion=$VERSION -o nupkg EntityFrameworkCore.Triggered.Core.slnf - name: Push to GitHub Feed run: | for f in ./nupkg/*.nupkg @@ -48,4 +45,4 @@ jobs: for f in ./nupkg/*.nupkg do dotnet nuget push $f --source $NUGET_FEED --skip-duplicate --api-key $NUGET_KEY - done + done \ No newline at end of file diff --git a/Directory.Build.props b/Directory.Build.props index 689cf75..00c9bc8 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,31 +1,24 @@ - - true - 9.0 - enable - true - Debug;Release - README.md - + + 12 + enable + true + true + README.md + - - Triggers for EF Core. Respond to changes in your ApplicationDbContext before and after they are committed to the database - Git - https://github.com/koenbeuk/EntityFrameworkCore.Triggered - Koen Bekkenutte - EntityFramework;EFCore;Triggers;SQLServer;SqlLite;CosmosDb;.NET Core;aspnetcore - https://github.com/koenbeuk/EntityFrameworkCore.Triggered - - - - 3 - 6.0.0 - 6.0.0 - + + Triggers for EF Core. Respond to changes in your ApplicationDbContext before and after they are committed to the database + Git + https://github.com/koenbeuk/EntityFrameworkCore.Triggered + Koen Bekkenutte + EntityFramework;EFCore;Triggers;SQLServer;SqlLite;CosmosDb;.NET Core;aspnetcore + https://github.com/koenbeuk/EntityFrameworkCore.Triggered + - - - + + + \ No newline at end of file diff --git a/Directory.Packages.props b/Directory.Packages.props new file mode 100644 index 0000000..8788e55 --- /dev/null +++ b/Directory.Packages.props @@ -0,0 +1,33 @@ + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EntityFrameworkCore.Triggered.sln b/EntityFrameworkCore.Triggered.sln index db3c390..d1193e9 100644 --- a/EntityFrameworkCore.Triggered.sln +++ b/EntityFrameworkCore.Triggered.sln @@ -4,8 +4,14 @@ Microsoft Visual Studio Solution File, Format Version 12.00 VisualStudioVersion = 17.0.31710.8 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{EDFABD48-3C79-47AE-B84C-47CE2A52C20D}" + ProjectSection(SolutionItems) = preProject + src\Directory.Build.props = src\Directory.Build.props + EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{0FAE4F6A-93BB-453C-8FB4-B24A9F30DA59}" + ProjectSection(SolutionItems) = preProject + test\Directory.Build.props = test\Directory.Build.props + EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Solution Items", "_Solution Items", "{CA7737C4-0D3C-4B81-B34C-B4812B54C018}" ProjectSection(SolutionItems) = preProject @@ -13,6 +19,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Solution Items", "_Solutio Directory.Build.props = Directory.Build.props LICENSE.md = LICENSE.md README.md = README.md + Directory.Packages.props = Directory.Packages.props + global.json = global.json EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EntityFrameworkCore.Triggered.Abstractions", "src\EntityFrameworkCore.Triggered.Abstractions\EntityFrameworkCore.Triggered.Abstractions.csproj", "{B338AEB6-4D18-4069-AE00-9A1E33C638F4}" @@ -47,6 +55,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "3 - StudentManagerAspNetCor EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "4 - BlazorTests", "samples\4 - BlazorTests\4 - BlazorTests.csproj", "{C764B357-8ABE-483E-BA1D-EC05ED689691}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Github", "_Github", "{BCBB4711-7968-44C0-81BD-C848FF4FBAB8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{46951DC8-925A-4542-99FC-2C2B3E00A997}" + ProjectSection(SolutionItems) = preProject + .github\workflows\build.yml = .github\workflows\build.yml + .github\workflows\release.yml = .github\workflows\release.yml + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -244,6 +260,7 @@ Global {6139FBAB-0224-42ED-8DAF-54ED1F3E8C5B} = {FB5C3BC0-5036-4DD6-85E2-E2B05ECAC40C} {6D1D3A38-523A-44A8-A3F9-B78E34706B37} = {FB5C3BC0-5036-4DD6-85E2-E2B05ECAC40C} {C764B357-8ABE-483E-BA1D-EC05ED689691} = {FB5C3BC0-5036-4DD6-85E2-E2B05ECAC40C} + {46951DC8-925A-4542-99FC-2C2B3E00A997} = {BCBB4711-7968-44C0-81BD-C848FF4FBAB8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {847A0017-23D6-4513-B78E-CAADBD836A7D} diff --git a/benchmarks/EntityFrameworkCore.Triggered.Benchmarks/EntityFrameworkCore.Triggered.Benchmarks.csproj b/benchmarks/EntityFrameworkCore.Triggered.Benchmarks/EntityFrameworkCore.Triggered.Benchmarks.csproj index 1dd0e35..e25dc65 100644 --- a/benchmarks/EntityFrameworkCore.Triggered.Benchmarks/EntityFrameworkCore.Triggered.Benchmarks.csproj +++ b/benchmarks/EntityFrameworkCore.Triggered.Benchmarks/EntityFrameworkCore.Triggered.Benchmarks.csproj @@ -1,6 +1,6 @@  - net6.0 + net10.0 Exe @@ -12,8 +12,8 @@ Release - - + + diff --git a/global.json b/global.json new file mode 100644 index 0000000..ba3d147 --- /dev/null +++ b/global.json @@ -0,0 +1,6 @@ +{ + "sdk": { + "version": "10.0.100", + "rollForward": "latestMinor" + } +} \ No newline at end of file diff --git a/samples/1 - HelloWorld/1 - HelloWorld.csproj b/samples/1 - HelloWorld/1 - HelloWorld.csproj index 3434bc4..8560c39 100644 --- a/samples/1 - HelloWorld/1 - HelloWorld.csproj +++ b/samples/1 - HelloWorld/1 - HelloWorld.csproj @@ -1,15 +1,18 @@  - - Exe - net6.0 - HelloWorld - disable - - - - - - - - + + Exe + net10.0 + HelloWorld + disable + + + + + + + + + + + \ No newline at end of file diff --git a/samples/1 - HelloWorld/Triggers/StudentAssignRegistrationDate.cs b/samples/1 - HelloWorld/Triggers/StudentAssignRegistrationDate.cs index 804269b..8047c02 100644 --- a/samples/1 - HelloWorld/Triggers/StudentAssignRegistrationDate.cs +++ b/samples/1 - HelloWorld/Triggers/StudentAssignRegistrationDate.cs @@ -5,9 +5,9 @@ namespace PrimarySchool.Triggers { - public class StudentAssignRegistrationDate : IBeforeSaveTrigger + public class StudentAssignRegistrationDate : IBeforeSaveAsyncTrigger { - public Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) + public Task BeforeSaveAsync(ITriggerContext context, CancellationToken cancellationToken) { if (context.ChangeType == ChangeType.Added) { diff --git a/samples/2 - PrimarySchool/2 - PrimarySchool.csproj b/samples/2 - PrimarySchool/2 - PrimarySchool.csproj index ced6050..6a52d90 100644 --- a/samples/2 - PrimarySchool/2 - PrimarySchool.csproj +++ b/samples/2 - PrimarySchool/2 - PrimarySchool.csproj @@ -1,15 +1,18 @@ - - Exe - net6.0 - PrimarySchool - disable - - - - - - - - + + Exe + net10.0 + PrimarySchool + disable + + + + + + + + + + + \ No newline at end of file diff --git a/samples/2 - PrimarySchool/Triggers/StudentSignupToMandatoryCourses.cs b/samples/2 - PrimarySchool/Triggers/StudentSignupToMandatoryCourses.cs index 63bf1ca..b042f03 100644 --- a/samples/2 - PrimarySchool/Triggers/StudentSignupToMandatoryCourses.cs +++ b/samples/2 - PrimarySchool/Triggers/StudentSignupToMandatoryCourses.cs @@ -5,7 +5,7 @@ namespace PrimarySchool.Triggers { - public class StudentSignupToMandatoryCourses : IBeforeSaveTrigger + public class StudentSignupToMandatoryCourses : IBeforeSaveAsyncTrigger { readonly ApplicationDbContext _applicationContext; @@ -14,7 +14,7 @@ public StudentSignupToMandatoryCourses(ApplicationDbContext applicationContext) _applicationContext = applicationContext; } - public Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) + public Task BeforeSaveAsync(ITriggerContext context, CancellationToken cancellationToken) { var mandatoryCourses = _applicationContext.Courses .Where(x => x.IsMandatory) diff --git a/samples/3 - StudentManagerAspNetCore/3 - StudentManagerAspNetCore.csproj b/samples/3 - StudentManagerAspNetCore/3 - StudentManagerAspNetCore.csproj index 81a49c0..a961699 100644 --- a/samples/3 - StudentManagerAspNetCore/3 - StudentManagerAspNetCore.csproj +++ b/samples/3 - StudentManagerAspNetCore/3 - StudentManagerAspNetCore.csproj @@ -1,14 +1,17 @@  - - net6.0 - StudentManager - disable - - - - - - - - + + net10.0 + StudentManager + disable + + + + + + + + + + + \ No newline at end of file diff --git a/samples/3 - StudentManagerAspNetCore/Triggers/Courses/AutoSignupStudents.cs b/samples/3 - StudentManagerAspNetCore/Triggers/Courses/AutoSignupStudents.cs index 0154d29..5352135 100644 --- a/samples/3 - StudentManagerAspNetCore/Triggers/Courses/AutoSignupStudents.cs +++ b/samples/3 - StudentManagerAspNetCore/Triggers/Courses/AutoSignupStudents.cs @@ -6,7 +6,7 @@ namespace StudentManager.Triggers.Courses { - public class AutoSignupStudents : IBeforeSaveTrigger + public class AutoSignupStudents : IBeforeSaveAsyncTrigger { readonly ApplicationDbContext _applicationContext; @@ -15,7 +15,7 @@ public AutoSignupStudents(ApplicationDbContext applicationContext) _applicationContext = applicationContext; } - public async Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) + public async Task BeforeSaveAsync(ITriggerContext context, CancellationToken cancellationToken) { if (context.Entity.IsMandatory) { diff --git a/samples/3 - StudentManagerAspNetCore/Triggers/StudentCourses/BlockRemovalWhenCourseIsMandatory.cs b/samples/3 - StudentManagerAspNetCore/Triggers/StudentCourses/BlockRemovalWhenCourseIsMandatory.cs index 8013f31..673bd73 100644 --- a/samples/3 - StudentManagerAspNetCore/Triggers/StudentCourses/BlockRemovalWhenCourseIsMandatory.cs +++ b/samples/3 - StudentManagerAspNetCore/Triggers/StudentCourses/BlockRemovalWhenCourseIsMandatory.cs @@ -5,7 +5,7 @@ namespace StudentManager.Triggers.StudentCourses { - public class BlockRemovalWhenCourseIsMandatory : IBeforeSaveTrigger + public class BlockRemovalWhenCourseIsMandatory : IBeforeSaveAsyncTrigger { readonly ApplicationDbContext _applicationContext; @@ -14,7 +14,7 @@ public BlockRemovalWhenCourseIsMandatory(ApplicationDbContext applicationContext _applicationContext = applicationContext; } - public async Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) + public async Task BeforeSaveAsync(ITriggerContext context, CancellationToken cancellationToken) { if (context.ChangeType == ChangeType.Deleted) { diff --git a/samples/3 - StudentManagerAspNetCore/Triggers/StudentCourses/SendWelcomingEmail.cs b/samples/3 - StudentManagerAspNetCore/Triggers/StudentCourses/SendWelcomingEmail.cs index d13c188..941291b 100644 --- a/samples/3 - StudentManagerAspNetCore/Triggers/StudentCourses/SendWelcomingEmail.cs +++ b/samples/3 - StudentManagerAspNetCore/Triggers/StudentCourses/SendWelcomingEmail.cs @@ -5,7 +5,7 @@ namespace StudentManager.Triggers.StudentCourses { - public class SendWelcomingEmail : IAfterSaveTrigger + public class SendWelcomingEmail : IAfterSaveAsyncTrigger { readonly ApplicationDbContext _applicationContext; readonly EmailService _emailService; @@ -16,7 +16,7 @@ public SendWelcomingEmail(ApplicationDbContext applicationContext, EmailService _emailService = emailService; } - public async Task AfterSave(ITriggerContext context, CancellationToken cancellationToken) + public async Task AfterSaveAsync(ITriggerContext context, CancellationToken cancellationToken) { var student = await _applicationContext.Students.FindAsync(new object[] { context.Entity.StudentId }, cancellationToken); var course = await _applicationContext.Courses.FindAsync(new object[] { context.Entity.CourseId }, cancellationToken); diff --git a/samples/3 - StudentManagerAspNetCore/Triggers/Students/AssignRegistrationDate.cs b/samples/3 - StudentManagerAspNetCore/Triggers/Students/AssignRegistrationDate.cs index 025d1d7..70d0be3 100644 --- a/samples/3 - StudentManagerAspNetCore/Triggers/Students/AssignRegistrationDate.cs +++ b/samples/3 - StudentManagerAspNetCore/Triggers/Students/AssignRegistrationDate.cs @@ -5,9 +5,9 @@ namespace StudentManager.Triggers.Students { - public class AssignRegistrationDate : IBeforeSaveTrigger + public class AssignRegistrationDate : IBeforeSaveAsyncTrigger { - public Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) + public Task BeforeSaveAsync(ITriggerContext context, CancellationToken cancellationToken) { context.Entity.RegistrationDate = DateTime.Today; diff --git a/samples/3 - StudentManagerAspNetCore/Triggers/Students/SignupToMandatoryCourses.cs b/samples/3 - StudentManagerAspNetCore/Triggers/Students/SignupToMandatoryCourses.cs index ba20025..9baea35 100644 --- a/samples/3 - StudentManagerAspNetCore/Triggers/Students/SignupToMandatoryCourses.cs +++ b/samples/3 - StudentManagerAspNetCore/Triggers/Students/SignupToMandatoryCourses.cs @@ -6,7 +6,7 @@ namespace StudentManager.Triggers.Students { - public class SignupToMandatoryCourses : IBeforeSaveTrigger + public class SignupToMandatoryCourses : IBeforeSaveAsyncTrigger { readonly ApplicationDbContext _applicationContext; @@ -15,7 +15,7 @@ public SignupToMandatoryCourses(ApplicationDbContext applicationContext) _applicationContext = applicationContext; } - public async Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) + public async Task BeforeSaveAsync(ITriggerContext context, CancellationToken cancellationToken) { var mandatoryCourses = await _applicationContext.Courses .Where(x => x.IsMandatory) diff --git a/samples/3 - StudentManagerAspNetCore/Triggers/Traits/Audited/CreateAuditRecord.cs b/samples/3 - StudentManagerAspNetCore/Triggers/Traits/Audited/CreateAuditRecord.cs index 9197864..ee8b9cc 100644 --- a/samples/3 - StudentManagerAspNetCore/Triggers/Traits/Audited/CreateAuditRecord.cs +++ b/samples/3 - StudentManagerAspNetCore/Triggers/Traits/Audited/CreateAuditRecord.cs @@ -8,7 +8,7 @@ namespace StudentManager.Triggers.Traits.Audited { - public class CreateAuditRecord : IBeforeSaveTrigger + public class CreateAuditRecord : IBeforeSaveAsyncTrigger { private readonly ApplicationDbContext _applicationContext; @@ -17,7 +17,7 @@ public CreateAuditRecord(ApplicationDbContext applicationContext) _applicationContext = applicationContext; } - public Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) + public Task BeforeSaveAsync(ITriggerContext context, CancellationToken cancellationToken) { var recordBuilder = new StringBuilder(); diff --git a/samples/3 - StudentManagerAspNetCore/Triggers/Traits/SoftDelete/EnsureSoftDelete.cs b/samples/3 - StudentManagerAspNetCore/Triggers/Traits/SoftDelete/EnsureSoftDelete.cs index d61e2a9..bda5cd2 100644 --- a/samples/3 - StudentManagerAspNetCore/Triggers/Traits/SoftDelete/EnsureSoftDelete.cs +++ b/samples/3 - StudentManagerAspNetCore/Triggers/Traits/SoftDelete/EnsureSoftDelete.cs @@ -6,7 +6,7 @@ namespace StudentManager.Triggers.Traits.SoftDelete { - class EnsureSoftDelete : IBeforeSaveTrigger + class EnsureSoftDelete : IBeforeSaveAsyncTrigger { readonly ApplicationDbContext _applicationContext; @@ -15,7 +15,7 @@ public EnsureSoftDelete(ApplicationDbContext applicationContext) _applicationContext = applicationContext; } - public Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) + public Task BeforeSaveAsync(ITriggerContext context, CancellationToken cancellationToken) { if (context.ChangeType == ChangeType.Deleted) { diff --git a/samples/4 - BlazorTests/4 - BlazorTests.csproj b/samples/4 - BlazorTests/4 - BlazorTests.csproj index 045a1d9..dfacbb0 100644 --- a/samples/4 - BlazorTests/4 - BlazorTests.csproj +++ b/samples/4 - BlazorTests/4 - BlazorTests.csproj @@ -1,14 +1,17 @@ - - net6.0 - BlazorTests - disable - + + net10.0 + BlazorTests + disable + - - - - + + + + + + + - + \ No newline at end of file diff --git a/samples/4 - BlazorTests/Startup.cs b/samples/4 - BlazorTests/Startup.cs index c18eb56..b56e603 100644 --- a/samples/4 - BlazorTests/Startup.cs +++ b/samples/4 - BlazorTests/Startup.cs @@ -24,7 +24,7 @@ public void ConfigureServices(IServiceCollection services) services.AddServerSideBlazor(); services.AddSingleton(); - services.AddTriggeredDbContextFactory(options => { + services.AddTriggeredDbContextFactory((_, options) => { options .UseSqlite("Data source=test.db") .UseTriggers(triggerOptions => { diff --git a/samples/4 - BlazorTests/Triggers/Counts/PublishCountAddedEvent.cs b/samples/4 - BlazorTests/Triggers/Counts/PublishCountAddedEvent.cs index d79b85d..cd76897 100644 --- a/samples/4 - BlazorTests/Triggers/Counts/PublishCountAddedEvent.cs +++ b/samples/4 - BlazorTests/Triggers/Counts/PublishCountAddedEvent.cs @@ -4,7 +4,7 @@ namespace BlazorTests.Triggers.Counts { - public class PublishCountAddedEvent : IAfterSaveTrigger + public class PublishCountAddedEvent : IAfterSaveAsyncTrigger { private readonly EventAggregator _eventAggregator; @@ -13,7 +13,7 @@ public PublishCountAddedEvent(EventAggregator eventAggregator) _eventAggregator = eventAggregator; } - public Task AfterSave(ITriggerContext context, CancellationToken cancellationToken) + public Task AfterSaveAsync(ITriggerContext context, CancellationToken cancellationToken) { if (context.ChangeType == ChangeType.Added) { diff --git a/samples/4 - BlazorTests/Triggers/Counts/SetCreatedOn.cs b/samples/4 - BlazorTests/Triggers/Counts/SetCreatedOn.cs index 7c8f9b4..a987f74 100644 --- a/samples/4 - BlazorTests/Triggers/Counts/SetCreatedOn.cs +++ b/samples/4 - BlazorTests/Triggers/Counts/SetCreatedOn.cs @@ -5,9 +5,9 @@ namespace BlazorTests.Triggers.Counts { - public class SetCreatedOn : IBeforeSaveTrigger + public class SetCreatedOn : IBeforeSaveAsyncTrigger { - public Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) + public Task BeforeSaveAsync(ITriggerContext context, CancellationToken cancellationToken) { context.Entity.CreatedOn = DateTime.UtcNow; diff --git a/samples/Directory.Build.props b/samples/Directory.Build.props deleted file mode 100644 index a7ba454..0000000 --- a/samples/Directory.Build.props +++ /dev/null @@ -1,6 +0,0 @@ - - - 6.0.0 - 3.0.0 - - \ No newline at end of file diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 06d4f16..ac45032 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -2,21 +2,7 @@ - net6.0 - EFCORETRIGGERED3 - - - - netstandard2.1 - EFCORETRIGGERED2 - - - - netstandard2.0 - EFCORETRIGGERED1 - - - + net8.0;net9.0;net10.0 true true snupkg @@ -34,7 +20,7 @@ - + \ No newline at end of file diff --git a/src/EntityFrameworkCore.Triggered.Abstractions/Internal/IsExternalInit.cs b/src/EntityFrameworkCore.Triggered.Abstractions/Internal/IsExternalInit.cs deleted file mode 100644 index 5fe34e5..0000000 --- a/src/EntityFrameworkCore.Triggered.Abstractions/Internal/IsExternalInit.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -#if NETSTANDARD2_0 || NETSTANDARD2_1 || NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 || NETCOREAPP3_0 || NETCOREAPP3_1 || NET45 || NET451 || NET452 || NET6 || NET461 || NET462 || NET47 || NET471 || NET472 || NET48 - -using System.ComponentModel; - -// ReSharper disable once CheckNamespace -namespace System.Runtime.CompilerServices -{ - /// - /// Reserved to be used by the compiler for tracking metadata. - /// This class should not be used by developers in source code. - /// - [EditorBrowsable(EditorBrowsableState.Never)] - internal static class IsExternalInit - { - } -} - -#endif \ No newline at end of file diff --git a/src/EntityFrameworkCore.Triggered/EntityFrameworkCore.Triggered.csproj b/src/EntityFrameworkCore.Triggered/EntityFrameworkCore.Triggered.csproj index 5f9df3b..909d546 100644 --- a/src/EntityFrameworkCore.Triggered/EntityFrameworkCore.Triggered.csproj +++ b/src/EntityFrameworkCore.Triggered/EntityFrameworkCore.Triggered.csproj @@ -1,7 +1,7 @@  - + diff --git a/test/Directory.Build.props b/test/Directory.Build.props new file mode 100644 index 0000000..d5032ee --- /dev/null +++ b/test/Directory.Build.props @@ -0,0 +1,27 @@ + + + + + net8.0;net9.0;net10.0 + false + disable + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + \ No newline at end of file diff --git a/test/EntityFrameworkCore.Triggered.Extensions.Tests/EntityFrameworkCore.Triggered.Extensions.Tests.csproj b/test/EntityFrameworkCore.Triggered.Extensions.Tests/EntityFrameworkCore.Triggered.Extensions.Tests.csproj index a9d8e0a..b8360d8 100644 --- a/test/EntityFrameworkCore.Triggered.Extensions.Tests/EntityFrameworkCore.Triggered.Extensions.Tests.csproj +++ b/test/EntityFrameworkCore.Triggered.Extensions.Tests/EntityFrameworkCore.Triggered.Extensions.Tests.csproj @@ -1,32 +1,12 @@  - - net6.0 - false - disable - + + + - - - - + + + - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - - - - - + \ No newline at end of file diff --git a/test/EntityFrameworkCore.Triggered.Extensions.Tests/ServiceCollectionExtensionsTests.cs b/test/EntityFrameworkCore.Triggered.Extensions.Tests/ServiceCollectionExtensionsTests.cs index 67abe00..d7156f4 100644 --- a/test/EntityFrameworkCore.Triggered.Extensions.Tests/ServiceCollectionExtensionsTests.cs +++ b/test/EntityFrameworkCore.Triggered.Extensions.Tests/ServiceCollectionExtensionsTests.cs @@ -143,7 +143,7 @@ public void AddAssemblyTriggers_AbstractTrigger_GetsIgnored() .AddAssemblyTriggers(); // Ensure that we did not register the AbstractTrigger - Assert.Empty(serviceCollection.Where(x => x.ImplementationType == typeof(AbstractTrigger))); + Assert.DoesNotContain(serviceCollection, x => x.ImplementationType == typeof(AbstractTrigger)); } [Theory] diff --git a/test/EntityFrameworkCore.Triggered.Extensions.Tests/TriggerContextOptionsBuilderExtensionsTests.cs b/test/EntityFrameworkCore.Triggered.Extensions.Tests/TriggerContextOptionsBuilderExtensionsTests.cs index d939649..6fab174 100644 --- a/test/EntityFrameworkCore.Triggered.Extensions.Tests/TriggerContextOptionsBuilderExtensionsTests.cs +++ b/test/EntityFrameworkCore.Triggered.Extensions.Tests/TriggerContextOptionsBuilderExtensionsTests.cs @@ -24,7 +24,7 @@ public void AddAssemblyTriggers_AbstractTrigger_GetsIgnored() var triggerOptionExtension = context.Options.Extensions.OfType().Single(); // Ensure that we did not register the AbstractTrigger - Assert.Empty(triggerOptionExtension.Triggers.Where(x => ReferenceEquals(x.typeOrInstance, typeof(AbstractTrigger)))); + Assert.DoesNotContain(triggerOptionExtension.Triggers, x => ReferenceEquals(x.typeOrInstance, typeof(AbstractTrigger))); } } } diff --git a/test/EntityFrameworkCore.Triggered.IntegrationTests/EntityFrameworkCore.Triggered.IntegrationTests.csproj b/test/EntityFrameworkCore.Triggered.IntegrationTests/EntityFrameworkCore.Triggered.IntegrationTests.csproj index 0ecc1d1..2d8d841 100644 --- a/test/EntityFrameworkCore.Triggered.IntegrationTests/EntityFrameworkCore.Triggered.IntegrationTests.csproj +++ b/test/EntityFrameworkCore.Triggered.IntegrationTests/EntityFrameworkCore.Triggered.IntegrationTests.csproj @@ -1,28 +1,12 @@ - - net6.0 - false - disable - + + + - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - + + + - - - - - + \ No newline at end of file diff --git a/test/EntityFrameworkCore.Triggered.Tests/EFCore5DbContextTests.cs b/test/EntityFrameworkCore.Triggered.Tests/EFCore5DbContextTests.cs index 5d8aec1..5148a43 100644 --- a/test/EntityFrameworkCore.Triggered.Tests/EFCore5DbContextTests.cs +++ b/test/EntityFrameworkCore.Triggered.Tests/EFCore5DbContextTests.cs @@ -131,7 +131,7 @@ public void SaveChanges_CascadingCall_ReturnsActiveTriggerSession() subject.SaveChanges(); - Assert.Equal(1, subject.TriggerStub.BeforeSaveInvocations.Count); + Assert.Single(subject.TriggerStub.BeforeSaveInvocations); } [Fact] @@ -163,7 +163,7 @@ public async Task SaveChangesAsync_CascadingCall_ReturnsActiveTriggerSession() await subject.SaveChangesAsync(); - Assert.Equal(1, subject.TriggerStub.BeforeSaveInvocations.Count); + Assert.Single(subject.TriggerStub.BeforeSaveInvocations); } [Fact] diff --git a/test/EntityFrameworkCore.Triggered.Tests/EntityFrameworkCore.Triggered.Tests.csproj b/test/EntityFrameworkCore.Triggered.Tests/EntityFrameworkCore.Triggered.Tests.csproj index 32e7a90..fb17ccb 100644 --- a/test/EntityFrameworkCore.Triggered.Tests/EntityFrameworkCore.Triggered.Tests.csproj +++ b/test/EntityFrameworkCore.Triggered.Tests/EntityFrameworkCore.Triggered.Tests.csproj @@ -1,32 +1,12 @@  - - net6.0 - false - disable - + + + + - - - - + + + - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - + \ No newline at end of file diff --git a/test/EntityFrameworkCore.Triggered.Tests/Infrastructure/ServiceCollectionExtensionsTests.cs b/test/EntityFrameworkCore.Triggered.Tests/Infrastructure/ServiceCollectionExtensionsTests.cs index 3050d96..ca6b729 100644 --- a/test/EntityFrameworkCore.Triggered.Tests/Infrastructure/ServiceCollectionExtensionsTests.cs +++ b/test/EntityFrameworkCore.Triggered.Tests/Infrastructure/ServiceCollectionExtensionsTests.cs @@ -93,7 +93,7 @@ public void AddTriggeredDbContext_ReusesScopedServiceProvider() var triggerStub = scope.ServiceProvider.GetRequiredService>() as TriggerStub; Assert.NotNull(triggerStub); - Assert.Equal(1, triggerStub.BeforeSaveInvocations.Count); + Assert.Single(triggerStub.BeforeSaveInvocations); } @@ -119,7 +119,7 @@ public void AddTriggeredDbContextPool_ReusesScopedServiceProvider() var triggerStub = scope.ServiceProvider.GetRequiredService>() as TriggerStub; Assert.NotNull(triggerStub); - Assert.Equal(1, triggerStub.BeforeSaveInvocations.Count); + Assert.Single(triggerStub.BeforeSaveInvocations); } [Fact] @@ -164,12 +164,11 @@ public void AddTriggeredDbContextPool_SupportAContractType() Assert.Equal(context1, context1); } -#if EFCORETRIGGERED2 || EFCORETRIGGERED3 [Fact] public void AddTriggeredDbContextFactory_ReusesScopedServiceProvider() { var subject = new ServiceCollection(); - subject.AddTriggeredDbContextFactory(options => { + subject.AddTriggeredDbContextFactory((_, options) => { options.UseInMemoryDatabase("test"); options.ConfigureWarnings(warningOptions => { warningOptions.Ignore(CoreEventId.ManyServiceProvidersCreatedWarning); @@ -189,7 +188,7 @@ public void AddTriggeredDbContextFactory_ReusesScopedServiceProvider() var triggerStub = scope.ServiceProvider.GetRequiredService>() as TriggerStub; Assert.NotNull(triggerStub); - Assert.Equal(1, triggerStub.BeforeSaveInvocations.Count); + Assert.Single(triggerStub.BeforeSaveInvocations); } [Fact] @@ -217,7 +216,7 @@ public void AddTriggeredDbContextFactory_WithCustomFactory_ReusesScopedServicePr var triggerStub = scope.ServiceProvider.GetRequiredService>() as TriggerStub; Assert.NotNull(triggerStub); - Assert.Equal(1, triggerStub.BeforeSaveInvocations.Count); + Assert.Single(triggerStub.BeforeSaveInvocations); } [Fact] @@ -244,8 +243,7 @@ public void AddTriggeredPooledDbContextFactory_ReusesScopedServiceProvider() var triggerStub = scope.ServiceProvider.GetRequiredService>() as TriggerStub; Assert.NotNull(triggerStub); - Assert.Equal(1, triggerStub.BeforeSaveInvocations.Count); + Assert.Single(triggerStub.BeforeSaveInvocations); } -#endif } } diff --git a/test/EntityFrameworkCore.Triggered.Tests/TriggerServiceApplicationDependenciesTests.cs b/test/EntityFrameworkCore.Triggered.Tests/TriggerServiceApplicationDependenciesTests.cs index 8afec31..03a826d 100644 --- a/test/EntityFrameworkCore.Triggered.Tests/TriggerServiceApplicationDependenciesTests.cs +++ b/test/EntityFrameworkCore.Triggered.Tests/TriggerServiceApplicationDependenciesTests.cs @@ -43,7 +43,7 @@ void SimulateRequest() using var serviceScope = applicationServiceProvider.CreateScope(); var dbContext = serviceScope.ServiceProvider.GetRequiredService(); var triggerStub = serviceScope.ServiceProvider.GetRequiredService>() as TriggerStub; - Assert.Equal(0, triggerStub.BeforeSaveInvocations.Count); + Assert.Empty(triggerStub.BeforeSaveInvocations); dbContext.Add(new TestModel { }); dbContext.SaveChanges(); @@ -75,7 +75,7 @@ public void ScopedTriggers_NoScopedApplicationServiceProvider_ForPooledDbContext var triggerStub = serviceScope.ServiceProvider.GetRequiredService>() as TriggerStub; - Assert.Equal(0, triggerStub.BeforeSaveInvocations.Count); + Assert.Empty(triggerStub.BeforeSaveInvocations); } @@ -106,7 +106,7 @@ public void ScopedTriggers_WithScopedApplicationServiceProvider_ForDbContext() var triggerStub = scopedServiceProvider.GetRequiredService>() as TriggerStub; - Assert.Equal(1, triggerStub.BeforeSaveInvocations.Count); + Assert.Single(triggerStub.BeforeSaveInvocations); } @@ -137,7 +137,7 @@ public void ScopedTriggers_WithScopedApplicationServiceProvider_ForPooledDbConte var triggerStub = scopedServiceProvider.GetRequiredService>() as TriggerStub; - Assert.Equal(1, triggerStub.BeforeSaveInvocations.Count); + Assert.Single(triggerStub.BeforeSaveInvocations); } [Fact] @@ -169,7 +169,7 @@ void SimulateRequest() var triggerStub = scopedServiceProvider.GetRequiredService>() as TriggerStub; - Assert.Equal(1, triggerStub.BeforeSaveInvocations.Count); + Assert.Single(triggerStub.BeforeSaveInvocations); } SimulateRequest(); diff --git a/test/EntityFrameworkCore.Triggered.Tests/TriggerSessionTests.cs b/test/EntityFrameworkCore.Triggered.Tests/TriggerSessionTests.cs index fe850f7..fe739d9 100644 --- a/test/EntityFrameworkCore.Triggered.Tests/TriggerSessionTests.cs +++ b/test/EntityFrameworkCore.Triggered.Tests/TriggerSessionTests.cs @@ -112,7 +112,7 @@ public void RaiseBeforeSaveTriggers_RaisesOnceOnSimpleAddition() subject.RaiseBeforeSaveTriggers(); - Assert.Equal(1, context.TriggerStub.BeforeSaveInvocations.Count); + Assert.Single(context.TriggerStub.BeforeSaveInvocations); } [Fact] @@ -128,7 +128,7 @@ public async Task RaiseBeforeSaveAsyncTriggers_RaisesOnceOnSimpleAddition() await subject.RaiseBeforeSaveAsyncTriggers(); - Assert.Equal(1, context.TriggerStub.BeforeSaveAsyncInvocations.Count); + Assert.Single(context.TriggerStub.BeforeSaveAsyncInvocations); } [Fact] @@ -173,7 +173,7 @@ public void RaiseAfterSaveTriggers_RaisesOnceOnSimpleAddition() subject.DiscoverChanges(); subject.RaiseAfterSaveTriggers(); - Assert.Equal(1, context.TriggerStub.AfterSaveInvocations.Count); + Assert.Single(context.TriggerStub.AfterSaveInvocations); } [Fact] @@ -190,7 +190,7 @@ public async Task RaiseAfterSaveAsyncTriggers_RaisesOnceOnSimpleAddition() subject.DiscoverChanges(); await subject.RaiseAfterSaveAsyncTriggers(); - Assert.Equal(1, context.TriggerStub.AfterSaveAsyncInvocations.Count); + Assert.Single(context.TriggerStub.AfterSaveAsyncInvocations); } [Fact] @@ -383,7 +383,7 @@ public void RaiseAfterSaveFailedTriggers_OnException_RaisesSubsequentTriggers() subject.DiscoverChanges(); subject.RaiseAfterSaveFailedTriggers(new Exception()); - Assert.Equal(1, context.TriggerStub.AfterSaveFailedInvocations.Count); + Assert.Single(context.TriggerStub.AfterSaveFailedInvocations); } @@ -401,7 +401,7 @@ public async Task RaiseAfterSaveFailedAsyncTriggers_OnException_RaisesSubsequent subject.DiscoverChanges(); await subject.RaiseAfterSaveFailedAsyncTriggers(new Exception()); - Assert.Equal(1, context.TriggerStub.AfterSaveFailedAsyncInvocations.Count); + Assert.Single(context.TriggerStub.AfterSaveFailedAsyncInvocations); } [Fact] @@ -445,9 +445,9 @@ public void RaiseBeforeSaveTriggers_OnExceptionAndRecall_SkipsPreviousTriggers() subject.RaiseBeforeSaveTriggers(); } - Assert.Equal(1, firstTrigger.BeforeSaveInvocations.Count); - Assert.Equal(1, secondTrigger.BeforeSaveInvocations.Count); - Assert.Equal(1, lastTrigger.BeforeSaveInvocations.Count); + Assert.Single(firstTrigger.BeforeSaveInvocations); + Assert.Single(secondTrigger.BeforeSaveInvocations); + Assert.Single(lastTrigger.BeforeSaveInvocations); } [Fact] @@ -517,7 +517,7 @@ public void RaiseTriggers_DisabledConfiguration_Noop() subject.RaiseBeforeSaveTriggers(); // assert - Assert.Equal(0, context.TriggerStub.BeforeSaveInvocations.Count); + Assert.Empty(context.TriggerStub.BeforeSaveInvocations); } } } diff --git a/test/EntityFrameworkCore.Triggered.Transactions.Tests/EntityFrameworkCore.Triggered.Transactions.Tests.csproj b/test/EntityFrameworkCore.Triggered.Transactions.Tests/EntityFrameworkCore.Triggered.Transactions.Tests.csproj index 93fe3cc..521953a 100644 --- a/test/EntityFrameworkCore.Triggered.Transactions.Tests/EntityFrameworkCore.Triggered.Transactions.Tests.csproj +++ b/test/EntityFrameworkCore.Triggered.Transactions.Tests/EntityFrameworkCore.Triggered.Transactions.Tests.csproj @@ -1,26 +1,7 @@ - - - net6.0 - false - disable - - - - - - + - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/test/EntityFrameworkCore.Triggered.Transactions.Tests/TriggeredDbContextTests.cs b/test/EntityFrameworkCore.Triggered.Transactions.Tests/TriggeredDbContextTests.cs index 9ce3514..df03bea 100644 --- a/test/EntityFrameworkCore.Triggered.Transactions.Tests/TriggeredDbContextTests.cs +++ b/test/EntityFrameworkCore.Triggered.Transactions.Tests/TriggeredDbContextTests.cs @@ -53,7 +53,7 @@ public void RaiseBeforeCommitTriggers_DiscoveredChangesFromTriggeredDbContext_Ca subject.RaiseBeforeCommitTriggers(); - Assert.Equal(1, dbContext.TriggerStub.BeforeCommitInvocations.Count); + Assert.Single(dbContext.TriggerStub.BeforeCommitInvocations); } @@ -72,7 +72,7 @@ public void RaiseAfterCommitTriggers_DiscoveredChangesFromTriggeredDbContext_Cal subject.RaiseAfterCommitTriggers(); - Assert.Equal(1, dbContext.TriggerStub.AfterCommitInvocations.Count); + Assert.Single(dbContext.TriggerStub.AfterCommitInvocations); } } } diff --git a/test/EntityFrameworkCore.Triggered.Transactions.Tests/TriggeredSessionExtensionsTests.cs b/test/EntityFrameworkCore.Triggered.Transactions.Tests/TriggeredSessionExtensionsTests.cs index 667506a..f4db1b6 100644 --- a/test/EntityFrameworkCore.Triggered.Transactions.Tests/TriggeredSessionExtensionsTests.cs +++ b/test/EntityFrameworkCore.Triggered.Transactions.Tests/TriggeredSessionExtensionsTests.cs @@ -80,7 +80,7 @@ public void RaiseBeforeCommitTriggers_RaisesOnceOnSimpleAddition() session.DiscoverChanges(); session.RaiseBeforeCommitTriggers(); - Assert.Equal(1, context.TriggerStub.BeforeCommitInvocations.Count); + Assert.Single(context.TriggerStub.BeforeCommitInvocations); } [Fact] @@ -97,7 +97,7 @@ public async Task RaiseBeforeCommitAsyncTriggers_RaisesOnceOnSimpleAddition() session.DiscoverChanges(); await session.RaiseBeforeCommitAsyncTriggers(); - Assert.Equal(1, context.TriggerStub.BeforeCommitAsyncInvocations.Count); + Assert.Single(context.TriggerStub.BeforeCommitAsyncInvocations); } [Fact] @@ -138,7 +138,7 @@ public void RaiseAfterCommitTriggers_RaisesOnceOnSimpleAddition() session.DiscoverChanges(); session.RaiseAfterCommitTriggers(); - Assert.Equal(1, context.TriggerStub.AfterCommitInvocations.Count); + Assert.Single(context.TriggerStub.AfterCommitInvocations); } [Fact] @@ -155,7 +155,7 @@ public async Task RaiseAfterCommitAsyncTriggers_RaisesOnceOnSimpleAddition() session.DiscoverChanges(); await session.RaiseAfterCommitAsyncTriggers(); - Assert.Equal(1, context.TriggerStub.AfterCommitAsyncInvocations.Count); + Assert.Single(context.TriggerStub.AfterCommitAsyncInvocations); } [Fact] @@ -196,7 +196,7 @@ public void RaiseBeforeRollbackTriggers_RaisesOnceOnSimpleAddition() session.DiscoverChanges(); session.RaiseBeforeRollbackTriggers(); - Assert.Equal(1, context.TriggerStub.BeforeRollbackInvocations.Count); + Assert.Single(context.TriggerStub.BeforeRollbackInvocations); } [Fact] @@ -213,7 +213,7 @@ public async Task RaiseBeforeRollbackAsyncTriggers_RaisesOnceOnSimpleAddition() session.DiscoverChanges(); await session.RaiseBeforeRollbackAsyncTriggers(); - Assert.Equal(1, context.TriggerStub.BeforeRollbackAsyncInvocations.Count); + Assert.Single(context.TriggerStub.BeforeRollbackAsyncInvocations); } [Fact] @@ -254,7 +254,7 @@ public void RaiseAfterRollbackTriggers_RaisesOnceOnSimpleAddition() session.DiscoverChanges(); session.RaiseAfterRollbackTriggers(); - Assert.Equal(1, context.TriggerStub.AfterRollbackInvocations.Count); + Assert.Single(context.TriggerStub.AfterRollbackInvocations); } [Fact] @@ -271,7 +271,7 @@ public async Task RaiseAfterRollbackAsyncTriggers_RaisesOnceOnSimpleAddition() session.DiscoverChanges(); await session.RaiseAfterRollbackAsyncTriggers(); - Assert.Equal(1, context.TriggerStub.AfterRollbackAsyncInvocations.Count); + Assert.Single(context.TriggerStub.AfterRollbackAsyncInvocations); } [Fact]