From ca11f93d82b67ab9eefaaee714dfc79d78144f2d Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 4 Sep 2023 17:00:19 +0800 Subject: [PATCH] Enable nullable annotations for Volo.Abp.EntityFrameworkCore --- .../Repositories/ISupportsExplicitLoading.cs | 2 +- .../Repositories/RepositoryExtensions.cs | 2 +- .../AbpEfCoreServiceCollectionExtensions.cs | 2 +- .../Volo.Abp.EntityFrameworkCore.csproj | 2 ++ .../EntityFrameworkCore/EfCoreRepository.cs | 20 ++++++------- .../Abp/EntityFrameworkCore/AbpDbContext.cs | 28 +++++++++---------- .../AbpDbContextOptions.cs | 2 +- .../AbpDbContextConfigurationContext.cs | 12 ++++---- .../DependencyInjection/AbpEntityOptions.cs | 8 +++--- .../DbContextCreationContext.cs | 4 +-- .../DbContextOptionsFactory.cs | 2 +- .../DistributedEvents/IncomingEventRecord.cs | 6 ++-- .../DistributedEvents/OutgoingEventRecord.cs | 4 +-- .../EfCoreAsyncQueryableProvider.cs | 12 ++++---- .../EntityHistory/EntityHistoryHelper.cs | 13 ++++----- .../EntityFrameworkCore/IEfCoreDbContext.cs | 12 ++++---- ...EfCoreDatabaseMigrationEventHandlerBase.cs | 4 +-- .../AbpModelBuilderConfigurationOptions.cs | 8 +++--- .../QueryFilterExpressionHelper.cs | 2 +- .../ExtraPropertyDictionaryValueComparer.cs | 2 +- .../AbpDateTimeValueConverter.cs | 4 +-- .../ValueConverters/AbpJsonValueConverter.cs | 2 +- .../ExtraPropertiesValueConverter.cs | 12 ++++---- ...reObjectExtensionPropertyInfoExtensions.cs | 5 ++-- ...ObjectExtensionInfoEfCoreMappingOptions.cs | 6 ++-- ...tensionPropertyInfoEfCoreMappingOptions.cs | 12 ++++---- .../UnitOfWorkMongoDbContextProvider.cs | 8 +++--- .../Volo/Abp/Uow/ChildUnitOfWork.cs | 2 +- .../Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs | 2 +- .../Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs | 2 +- 30 files changed, 99 insertions(+), 103 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/ISupportsExplicitLoading.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/ISupportsExplicitLoading.cs index 5131486c1e..08c1f2556f 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/ISupportsExplicitLoading.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/ISupportsExplicitLoading.cs @@ -18,7 +18,7 @@ public interface ISupportsExplicitLoading Task EnsurePropertyLoadedAsync( TEntity entity, - Expression> propertyExpression, + Expression> propertyExpression, CancellationToken cancellationToken) where TProperty : class; } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs index d40449a2e4..3c43798c38 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs @@ -34,7 +34,7 @@ public static class RepositoryExtensions public async static Task EnsurePropertyLoadedAsync( this IBasicRepository repository, TEntity entity, - Expression> propertyExpression, + Expression> propertyExpression, CancellationToken cancellationToken = default ) where TEntity : class, IEntity diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpEfCoreServiceCollectionExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpEfCoreServiceCollectionExtensions.cs index f51df050ef..55e88b72e7 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpEfCoreServiceCollectionExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpEfCoreServiceCollectionExtensions.cs @@ -13,7 +13,7 @@ public static class AbpEfCoreServiceCollectionExtensions { public static IServiceCollection AddAbpDbContext( this IServiceCollection services, - Action optionsBuilder = null) + Action? optionsBuilder = null) where TDbContext : AbpDbContext { services.AddMemoryCache(); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj b/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj index c547299bae..af2be88afa 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable Volo.Abp.EntityFrameworkCore Volo.Abp.EntityFrameworkCore $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index 1c5d106166..3274360ba2 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -26,11 +26,11 @@ public class EfCoreRepository : RepositoryBase, IE protected virtual TDbContext DbContext => GetDbContext(); [Obsolete("Use GetDbContextAsync() method.")] - DbContext IEfCoreRepository.DbContext => GetDbContext() as DbContext; + DbContext IEfCoreRepository.DbContext => (GetDbContext() as DbContext)!; async Task IEfCoreRepository.GetDbContextAsync() { - return await GetDbContextAsync() as DbContext; + return (await GetDbContextAsync() as DbContext)!; } [Obsolete("Use GetDbContextAsync() method.")] @@ -80,7 +80,7 @@ public class EfCoreRepository : RepositoryBase, IE return (await GetDbContextAsync()).Database.GetDbConnection(); } - protected async Task GetDbTransactionAsync() + protected async Task GetDbTransactionAsync() { return (await GetDbContextAsync()).Database.CurrentTransaction?.GetDbTransaction(); } @@ -92,7 +92,7 @@ public class EfCoreRepository : RepositoryBase, IE public virtual IGuidGenerator GuidGenerator => LazyServiceProvider.LazyGetService(SimpleGuidGenerator.Instance); - public IEfCoreBulkOperationProvider BulkOperationProvider => LazyServiceProvider.LazyGetService(); + public IEfCoreBulkOperationProvider? BulkOperationProvider => LazyServiceProvider.LazyGetService(); public EfCoreRepository(IDbContextProvider dbContextProvider) { @@ -301,7 +301,7 @@ public class EfCoreRepository : RepositoryBase, IE await (await GetDbContextAsync()).SaveChangesAsync(cancellationToken); } - public async override Task FindAsync( + public async override Task FindAsync( Expression> predicate, bool includeDetails = true, CancellationToken cancellationToken = default) @@ -353,7 +353,7 @@ public class EfCoreRepository : RepositoryBase, IE public virtual async Task EnsurePropertyLoadedAsync( TEntity entity, - Expression> propertyExpression, + Expression> propertyExpression, CancellationToken cancellationToken = default) where TProperty : class { @@ -464,13 +464,13 @@ public class EfCoreRepository : EfCoreRepository FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default) + public virtual async Task FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default) { return includeDetails - ? await (await WithDetailsAsync()).OrderBy(e => e.Id).FirstOrDefaultAsync(e => e.Id.Equals(id), GetCancellationToken(cancellationToken)) + ? await (await WithDetailsAsync()).OrderBy(e => e.Id).FirstOrDefaultAsync(e => e.Id!.Equals(id), GetCancellationToken(cancellationToken)) : !ShouldTrackingEntityChange() - ? await (await GetQueryableAsync()).OrderBy(e => e.Id).FirstOrDefaultAsync(e => e.Id.Equals(id), GetCancellationToken(cancellationToken)) - : await (await GetDbSetAsync()).FindAsync(new object[] {id}, GetCancellationToken(cancellationToken)); + ? await (await GetQueryableAsync()).OrderBy(e => e.Id).FirstOrDefaultAsync(e => e.Id!.Equals(id), GetCancellationToken(cancellationToken)) + : await (await GetDbSetAsync()).FindAsync(new object[] {id!}, GetCancellationToken(cancellationToken)); } public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index bc93ca97b8..05dd4527fc 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -37,7 +37,7 @@ namespace Volo.Abp.EntityFrameworkCore; public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, ITransientDependency where TDbContext : DbContext { - public IAbpLazyServiceProvider LazyServiceProvider { get; set; } + public IAbpLazyServiceProvider LazyServiceProvider { get; set; } = default!; protected virtual Guid? CurrentTenantId => CurrentTenant?.Id; @@ -74,21 +74,21 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, .GetMethod( nameof(ConfigureBaseProperties), BindingFlags.Instance | BindingFlags.NonPublic - ); + )!; private static readonly MethodInfo ConfigureValueConverterMethodInfo = typeof(AbpDbContext) .GetMethod( nameof(ConfigureValueConverter), BindingFlags.Instance | BindingFlags.NonPublic - ); + )!; private static readonly MethodInfo ConfigureValueGeneratedMethodInfo = typeof(AbpDbContext) .GetMethod( nameof(ConfigureValueGenerated), BindingFlags.Instance | BindingFlags.NonPublic - ); + )!; protected AbpDbContext(DbContextOptions options) : base(options) @@ -157,7 +157,7 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, try { var auditLog = AuditingManager?.Current?.Log; - List entityChangeList = null; + List? entityChangeList = null; if (auditLog != null) { entityChangeList = EntityHistoryHelper.CreateChangeList(ChangeTracker.Entries().ToList()); @@ -174,7 +174,7 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, if (entityChangeList != null) { EntityHistoryHelper.UpdateChangeList(entityChangeList); - auditLog.EntityChanges.AddRange(entityChangeList); + auditLog!.EntityChanges.AddRange(entityChangeList); Logger.LogDebug($"Added {entityChangeList.Count} entity changes to the current audit log"); } @@ -249,13 +249,13 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, } } - protected virtual void ChangeTracker_Tracked(object sender, EntityTrackedEventArgs e) + protected virtual void ChangeTracker_Tracked(object? sender, EntityTrackedEventArgs e) { FillExtraPropertiesForTrackedEntities(e); PublishEventsForTrackedEntity(e.Entry); } - protected virtual void ChangeTracker_StateChanged(object sender, EntityStateChangedEventArgs e) + protected virtual void ChangeTracker_StateChanged(object? sender, EntityStateChangedEventArgs e) { PublishEventsForTrackedEntity(e.Entry); } @@ -453,11 +453,11 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, if (conversionType == typeof(Guid)) { - entryProperty.CurrentValue = TypeDescriptor.GetConverter(conversionType).ConvertFromInvariantString(entityProperty.ToString()); + entryProperty.CurrentValue = TypeDescriptor.GetConverter(conversionType).ConvertFromInvariantString(entityProperty.ToString()!); } else if (conversionType.IsEnum) { - entryProperty.CurrentValue = Enum.Parse(conversionType, entityProperty.ToString(), ignoreCase: true); + entryProperty.CurrentValue = Enum.Parse(conversionType, entityProperty.ToString()!, ignoreCase: true); } else { @@ -560,7 +560,7 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, return; } - var idProperty = entry.Property("Id").Metadata.PropertyInfo; + var idProperty = entry.Property("Id").Metadata.PropertyInfo!; //Check for DatabaseGeneratedAttribute var dbGeneratedAttr = ReflectionHelper @@ -669,7 +669,7 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, } var idPropertyBuilder = modelBuilder.Entity().Property(x => ((IEntity)x).Id); - if (idPropertyBuilder.Metadata.PropertyInfo.IsDefined(typeof(DatabaseGeneratedAttribute), true)) + if (idPropertyBuilder.Metadata.PropertyInfo!.IsDefined(typeof(DatabaseGeneratedAttribute), true)) { return; } @@ -692,10 +692,10 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, return false; } - protected virtual Expression> CreateFilterExpression() + protected virtual Expression>? CreateFilterExpression() where TEntity : class { - Expression> expression = null; + Expression>? expression = null; if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity))) { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContextOptions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContextOptions.cs index 43803b4004..cb5b258192 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContextOptions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContextOptions.cs @@ -12,7 +12,7 @@ public class AbpDbContextOptions { internal List> DefaultPreConfigureActions { get; } - internal Action DefaultConfigureAction { get; set; } + internal Action? DefaultConfigureAction { get; set; } internal Dictionary> PreConfigureActions { get; } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpDbContextConfigurationContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpDbContextConfigurationContext.cs index 8d60d6d3c9..34a7dd008d 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpDbContextConfigurationContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpDbContextConfigurationContext.cs @@ -14,17 +14,17 @@ public class AbpDbContextConfigurationContext : IServiceProviderAccessor public string ConnectionString { get; } - public string ConnectionStringName { get; } + public string? ConnectionStringName { get; } - public DbConnection ExistingConnection { get; } + public DbConnection? ExistingConnection { get; } public DbContextOptionsBuilder DbContextOptions { get; protected set; } public AbpDbContextConfigurationContext( [NotNull] string connectionString, [NotNull] IServiceProvider serviceProvider, - [CanBeNull] string connectionStringName, - [CanBeNull] DbConnection existingConnection) + string? connectionStringName, + DbConnection? existingConnection) { ConnectionString = connectionString; ServiceProvider = serviceProvider; @@ -45,8 +45,8 @@ public class AbpDbContextConfigurationContext : AbpDbContextConfigur public AbpDbContextConfigurationContext( string connectionString, [NotNull] IServiceProvider serviceProvider, - [CanBeNull] string connectionStringName, - [CanBeNull] DbConnection existingConnection) + string? connectionStringName, + DbConnection? existingConnection) : base( connectionString, serviceProvider, diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpEntityOptions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpEntityOptions.cs index a2c75fe5c3..ecd98356c3 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpEntityOptions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpEntityOptions.cs @@ -11,7 +11,7 @@ public class AbpEntityOptions { public static AbpEntityOptions Empty { get; } = new AbpEntityOptions(); - public Func, IQueryable> DefaultWithDetailsFunc { get; set; } + public Func, IQueryable>? DefaultWithDetailsFunc { get; set; } } public class AbpEntityOptions @@ -23,7 +23,7 @@ public class AbpEntityOptions _options = new Dictionary(); } - public AbpEntityOptions GetOrNull() + public AbpEntityOptions? GetOrNull() where TEntity : IEntity { return _options.GetOrDefault(typeof(TEntity)) as AbpEntityOptions; @@ -35,10 +35,10 @@ public class AbpEntityOptions Check.NotNull(optionsAction, nameof(optionsAction)); optionsAction( - _options.GetOrAdd( + (_options.GetOrAdd( typeof(TEntity), () => new AbpEntityOptions() - ) as AbpEntityOptions + ) as AbpEntityOptions)! ); } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextCreationContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextCreationContext.cs index 311cca1153..a7ea24a778 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextCreationContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextCreationContext.cs @@ -6,14 +6,14 @@ namespace Volo.Abp.EntityFrameworkCore.DependencyInjection; public class DbContextCreationContext { - public static DbContextCreationContext Current => _current.Value; + public static DbContextCreationContext Current => _current.Value!; private static readonly AsyncLocal _current = new AsyncLocal(); public string ConnectionStringName { get; } public string ConnectionString { get; } - public DbConnection ExistingConnection { get; internal set; } + public DbConnection? ExistingConnection { get; internal set; } public DbContextCreationContext(string connectionStringName, string connectionString) { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs index eb51c4843f..1b3a6f48b5 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs @@ -43,7 +43,7 @@ public static class DbContextOptionsFactory var preConfigureActions = options.PreConfigureActions.GetOrDefault(typeof(TDbContext)); if (!preConfigureActions.IsNullOrEmpty()) { - foreach (var preConfigureAction in preConfigureActions) + foreach (var preConfigureAction in preConfigureActions!) { ((Action>)preConfigureAction).Invoke(context); } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs index 986c19bbbf..6d151851c4 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs @@ -15,11 +15,11 @@ public class IncomingEventRecord : public ExtraPropertyDictionary ExtraProperties { get; private set; } - public string MessageId { get; private set; } + public string MessageId { get; private set; } = default!; - public string EventName { get; private set; } + public string EventName { get; private set; } = default!; - public byte[] EventData { get; private set; } + public byte[] EventData { get; private set; } = default!; public DateTime CreationTime { get; private set; } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs index fe639411a2..163e90e26d 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs @@ -15,9 +15,9 @@ public class OutgoingEventRecord : public ExtraPropertyDictionary ExtraProperties { get; private set; } - public string EventName { get; private set; } + public string EventName { get; private set; } = default!; - public byte[] EventData { get; private set; } + public byte[] EventData { get; private set; } = default!; public DateTime CreationTime { get; private set; } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs index 8e107d0d72..f9a9d21e6a 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs @@ -68,12 +68,12 @@ public class EfCoreAsyncQueryableProvider : IAsyncQueryableProvider, ISingletonD return queryable.FirstAsync(predicate, cancellationToken); } - public Task FirstOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + public Task FirstOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) { return queryable.FirstOrDefaultAsync(cancellationToken); } - public Task FirstOrDefaultAsync(IQueryable queryable, Expression> predicate, + public Task FirstOrDefaultAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) { return queryable.FirstOrDefaultAsync(predicate, cancellationToken); @@ -89,12 +89,12 @@ public class EfCoreAsyncQueryableProvider : IAsyncQueryableProvider, ISingletonD return queryable.LastAsync(predicate, cancellationToken); } - public Task LastOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + public Task LastOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) { return queryable.LastOrDefaultAsync(cancellationToken); } - public Task LastOrDefaultAsync(IQueryable queryable, Expression> predicate, + public Task LastOrDefaultAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) { return queryable.LastOrDefaultAsync(predicate, cancellationToken); @@ -110,12 +110,12 @@ public class EfCoreAsyncQueryableProvider : IAsyncQueryableProvider, ISingletonD return queryable.SingleAsync(predicate, cancellationToken); } - public Task SingleOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + public Task SingleOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) { return queryable.SingleOrDefaultAsync(cancellationToken); } - public Task SingleOrDefaultAsync(IQueryable queryable, Expression> predicate, + public Task SingleOrDefaultAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) { return queryable.SingleOrDefaultAsync(predicate, cancellationToken); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs index d21e4c43c5..cb97111c59 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs @@ -69,8 +69,7 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency return list; } - [CanBeNull] - protected virtual EntityChangeInfo CreateEntityChangeOrNull(EntityEntry entityEntry) + protected virtual EntityChangeInfo? CreateEntityChangeOrNull(EntityEntry entityEntry) { var entity = entityEntry.Entity; @@ -138,7 +137,7 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency } } - protected virtual string GetEntityId(object entityAsObj) + protected virtual string? GetEntityId(object entityAsObj) { if ((entityAsObj is IEntity entity)) { @@ -370,10 +369,10 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency // Add foreign key entityChange.PropertyChanges.Add(new EntityPropertyChangeInfo { - NewValue = JsonSerializer.Serialize(propertyEntry.CurrentValue), - OriginalValue = JsonSerializer.Serialize(propertyEntry.OriginalValue), + NewValue = JsonSerializer.Serialize(propertyEntry.CurrentValue!), + OriginalValue = JsonSerializer.Serialize(propertyEntry.OriginalValue!), PropertyName = property.Name, - PropertyTypeFullName = property.ClrType.GetFirstGenericArgumentIfNullable().FullName + PropertyTypeFullName = property.ClrType.GetFirstGenericArgumentIfNullable().FullName! }); } @@ -382,7 +381,7 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency if (propertyChange.OriginalValue == propertyChange.NewValue) { - var newValue = JsonSerializer.Serialize(propertyEntry.CurrentValue); + var newValue = JsonSerializer.Serialize(propertyEntry.CurrentValue!); if (newValue == propertyChange.NewValue) { // No change diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs index 014e893fdf..833163d223 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs @@ -60,17 +60,17 @@ public interface IEfCoreDbContext : IDisposable, IInfrastructure([NotNull] params object[] keyValues) where TEntity : class; + TEntity? Find([NotNull] params object[] keyValues) where TEntity : class; - ValueTask FindAsync([NotNull] Type entityType, [NotNull] object[] keyValues, CancellationToken cancellationToken); + ValueTask FindAsync([NotNull] Type entityType, [NotNull] object[] keyValues, CancellationToken cancellationToken); - ValueTask FindAsync([NotNull] object[] keyValues, CancellationToken cancellationToken) where TEntity : class; + ValueTask FindAsync([NotNull] object[] keyValues, CancellationToken cancellationToken) where TEntity : class; - ValueTask FindAsync([NotNull] params object[] keyValues) where TEntity : class; + ValueTask FindAsync([NotNull] params object[] keyValues) where TEntity : class; - ValueTask FindAsync([NotNull] Type entityType, [NotNull] params object[] keyValues); + ValueTask FindAsync([NotNull] Type entityType, [NotNull] params object[] keyValues); EntityEntry Remove([NotNull] TEntity entity) where TEntity : class; diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Migrations/EfCoreDatabaseMigrationEventHandlerBase.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Migrations/EfCoreDatabaseMigrationEventHandlerBase.cs index d9fc7db914..a5dcbd65cc 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Migrations/EfCoreDatabaseMigrationEventHandlerBase.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Migrations/EfCoreDatabaseMigrationEventHandlerBase.cs @@ -210,7 +210,7 @@ public abstract class EfCoreDatabaseMigrationEventHandlerBase : else { var tenantConfiguration = await TenantStore.FindAsync(tenantId.Value); - if (!tenantConfiguration.ConnectionStrings.Default.IsNullOrWhiteSpace() || + if (!tenantConfiguration!.ConnectionStrings!.Default.IsNullOrWhiteSpace() || !tenantConfiguration.ConnectionStrings.GetOrDefault(DatabaseName).IsNullOrWhiteSpace()) { //Migrating the tenant database (only if tenant has a separate database) @@ -301,7 +301,7 @@ public abstract class EfCoreDatabaseMigrationEventHandlerBase : return 0; } - return int.Parse(tryCountAsString); + return int.Parse(tryCountAsString!); } private static void SetEventTryCount(EtoBase eventData, int count) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderConfigurationOptions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderConfigurationOptions.cs index 4ea08edced..17b000eb45 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderConfigurationOptions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderConfigurationOptions.cs @@ -12,14 +12,14 @@ public class AbpModelBuilderConfigurationOptions _tablePrefix = value; } } - private string _tablePrefix; - [CanBeNull] - public string Schema { get; set; } + private string _tablePrefix = default!; + + public string? Schema { get; set; } public AbpModelBuilderConfigurationOptions( [NotNull] string tablePrefix = "", - [CanBeNull] string schema = null) + string? schema = null) { Check.NotNull(tablePrefix, nameof(tablePrefix)); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/QueryFilterExpressionHelper.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/QueryFilterExpressionHelper.cs index dfd5edf38f..1c60582ad0 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/QueryFilterExpressionHelper.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/QueryFilterExpressionHelper.cs @@ -29,7 +29,7 @@ public static class QueryFilterExpressionHelper _newValue = newValue; } - public override Expression Visit(Expression node) + public override Expression? Visit(Expression? node) { return node == _oldValue ? _newValue : base.Visit(node); } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/ExtraPropertyDictionaryValueComparer.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/ExtraPropertyDictionaryValueComparer.cs index 123ba2be46..dca9ee0fc0 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/ExtraPropertyDictionaryValueComparer.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/ExtraPropertyDictionaryValueComparer.cs @@ -9,7 +9,7 @@ public class ExtraPropertyDictionaryValueComparer : ValueComparer d1.SequenceEqual(d2), + (d1, d2) => d1!.SequenceEqual(d2!), d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())), d => new ExtraPropertyDictionary(d)) { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs index 17513d46a2..702890a0a7 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs @@ -7,7 +7,7 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters; public class AbpDateTimeValueConverter : ValueConverter { - public AbpDateTimeValueConverter(IClock clock, [CanBeNull] ConverterMappingHints mappingHints = null) + public AbpDateTimeValueConverter(IClock clock, ConverterMappingHints? mappingHints = null) : base( x => clock.Normalize(x), x => clock.Normalize(x), mappingHints) @@ -17,7 +17,7 @@ public class AbpDateTimeValueConverter : ValueConverter public class AbpNullableDateTimeValueConverter : ValueConverter { - public AbpNullableDateTimeValueConverter(IClock clock, [CanBeNull] ConverterMappingHints mappingHints = null) + public AbpNullableDateTimeValueConverter(IClock clock, ConverterMappingHints? mappingHints = null) : base( x => x.HasValue ? clock.Normalize(x.Value) : x, x => x.HasValue ? clock.Normalize(x.Value) : x, mappingHints) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs index 5be0cf6911..80035c3252 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs @@ -29,6 +29,6 @@ public class AbpJsonValueConverter : ValueConverter(s, DeserializeOptions); + return JsonSerializer.Deserialize(s, DeserializeOptions)!; } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs index 1aa9f48b07..640da7122c 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs @@ -19,9 +19,9 @@ public class ExtraPropertiesValueConverter : ValueConverter(extraProperties); + var copyDictionary = new Dictionary(extraProperties); if (entityType != null) { @@ -49,7 +49,7 @@ public class ExtraPropertiesValueConverter : ValueConverter dictionary, ObjectExtensionPropertyInfo property) { @@ -88,7 +88,7 @@ public class ExtraPropertiesValueConverter : ValueConverter entityTypeAndPropertyBuildAction) + Action? entityTypeAndPropertyBuildAction) { Check.NotNull(propertyExtension, nameof(propertyExtension)); @@ -56,8 +56,7 @@ public static class EfCoreObjectExtensionPropertyInfoExtensions return propertyExtension; } - [CanBeNull] - public static ObjectExtensionPropertyInfoEfCoreMappingOptions GetEfCoreMappingOrNull( + public static ObjectExtensionPropertyInfoEfCoreMappingOptions? GetEfCoreMappingOrNull( [NotNull] this ObjectExtensionPropertyInfo propertyExtension) { Check.NotNull(propertyExtension, nameof(propertyExtension)); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionInfoEfCoreMappingOptions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionInfoEfCoreMappingOptions.cs index a63b23782a..8c23de2961 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionInfoEfCoreMappingOptions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionInfoEfCoreMappingOptions.cs @@ -10,11 +10,9 @@ public class ObjectExtensionInfoEfCoreMappingOptions [NotNull] public ObjectExtensionInfo ObjectExtension { get; } - [CanBeNull] - public Action EntityTypeBuildAction { get; set; } + public Action? EntityTypeBuildAction { get; set; } - [CanBeNull] - public Action ModelBuildAction { get; set; } + public Action? ModelBuildAction { get; set; } public ObjectExtensionInfoEfCoreMappingOptions( [NotNull] ObjectExtensionInfo objectExtension, diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfoEfCoreMappingOptions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfoEfCoreMappingOptions.cs index 3a9e67b1ea..49c6e89197 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfoEfCoreMappingOptions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfoEfCoreMappingOptions.cs @@ -13,17 +13,15 @@ public class ObjectExtensionPropertyInfoEfCoreMappingOptions public ObjectExtensionInfo ObjectExtension => ExtensionProperty.ObjectExtension; [Obsolete("Use EntityTypeAndPropertyBuildAction property.")] - [CanBeNull] - public Action PropertyBuildAction { get; set; } + public Action? PropertyBuildAction { get; set; } - [CanBeNull] - public Action EntityTypeAndPropertyBuildAction { get; set; } + public Action? EntityTypeAndPropertyBuildAction { get; set; } [Obsolete("Use other constructors.")] public ObjectExtensionPropertyInfoEfCoreMappingOptions( [NotNull] ObjectExtensionPropertyInfo extensionProperty, - [CanBeNull] Action propertyBuildAction = null, - [CanBeNull] Action entityTypeAndPropertyBuildAction = null) + Action? propertyBuildAction = null, + Action? entityTypeAndPropertyBuildAction = null) { ExtensionProperty = Check.NotNull(extensionProperty, nameof(extensionProperty)); @@ -39,7 +37,7 @@ public class ObjectExtensionPropertyInfoEfCoreMappingOptions public ObjectExtensionPropertyInfoEfCoreMappingOptions( [NotNull] ObjectExtensionPropertyInfo extensionProperty, - [CanBeNull] Action entityTypeAndPropertyBuildAction) + Action? entityTypeAndPropertyBuildAction) { ExtensionProperty = Check.NotNull(extensionProperty, nameof(extensionProperty)); diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs index 474eb8542e..04d4e0bfa5 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs @@ -131,7 +131,7 @@ public class UnitOfWorkMongoDbContextProvider : IMongoDbContext var client = CreateMongoClient(mongoUrl); var database = client.GetDatabase(databaseName); - if (unitOfWork.Options!.IsTransactional) + if (unitOfWork.Options.IsTransactional) { return CreateDbContextWithTransaction(unitOfWork, mongoUrl, client, database); } @@ -151,7 +151,7 @@ public class UnitOfWorkMongoDbContextProvider : IMongoDbContext var client = CreateMongoClient(mongoUrl); var database = client.GetDatabase(databaseName); - if (unitOfWork.Options!.IsTransactional) + if (unitOfWork.Options.IsTransactional) { return await CreateDbContextWithTransactionAsync( unitOfWork, @@ -183,7 +183,7 @@ public class UnitOfWorkMongoDbContextProvider : IMongoDbContext { var session = client.StartSession(); - if (unitOfWork.Options!.Timeout.HasValue) + if (unitOfWork.Options.Timeout.HasValue) { session.AdvanceOperationTime(new BsonTimestamp(unitOfWork.Options.Timeout.Value)); } @@ -233,7 +233,7 @@ public class UnitOfWorkMongoDbContextProvider : IMongoDbContext { var session = await client.StartSessionAsync(cancellationToken: GetCancellationToken(cancellationToken)); - if (unitOfWork.Options!.Timeout.HasValue) + if (unitOfWork.Options.Timeout.HasValue) { session.AdvanceOperationTime(new BsonTimestamp(unitOfWork.Options.Timeout.Value)); } diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs index eb51d8c189..5f400abcfd 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs @@ -10,7 +10,7 @@ internal class ChildUnitOfWork : IUnitOfWork { public Guid Id => _parent.Id; - public IAbpUnitOfWorkOptions? Options => _parent.Options; + public IAbpUnitOfWorkOptions Options => _parent.Options; public IUnitOfWork? Outer => _parent.Outer; diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs index 15dc2bdec0..4ebc5afd84 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs @@ -17,7 +17,7 @@ public interface IUnitOfWork : IDatabaseApiContainer, ITransactionApiContainer, event EventHandler Disposed; - IAbpUnitOfWorkOptions? Options { get; } + IAbpUnitOfWorkOptions Options { get; } IUnitOfWork? Outer { get; } diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs index c04393d104..74b1b79e77 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs @@ -21,7 +21,7 @@ public class UnitOfWork : IUnitOfWork, ITransientDependency public Guid Id { get; } = Guid.NewGuid(); - public IAbpUnitOfWorkOptions? Options { get; private set; } + public IAbpUnitOfWorkOptions Options { get; private set; } = default!; public IUnitOfWork? Outer { get; private set; }