Browse Source

Enable nullable annotations for Volo.Abp.EntityFrameworkCore

pull/17549/head
liangshiwei 3 years ago
parent
commit
ca11f93d82
  1. 2
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/ISupportsExplicitLoading.cs
  2. 2
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs
  3. 2
      framework/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpEfCoreServiceCollectionExtensions.cs
  4. 2
      framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj
  5. 20
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs
  6. 28
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
  7. 2
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContextOptions.cs
  8. 12
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpDbContextConfigurationContext.cs
  9. 8
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpEntityOptions.cs
  10. 4
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextCreationContext.cs
  11. 2
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs
  12. 6
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs
  13. 4
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/OutgoingEventRecord.cs
  14. 12
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs
  15. 13
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs
  16. 12
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs
  17. 4
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Migrations/EfCoreDatabaseMigrationEventHandlerBase.cs
  18. 8
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderConfigurationOptions.cs
  19. 2
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/QueryFilterExpressionHelper.cs
  20. 2
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/ExtraPropertyDictionaryValueComparer.cs
  21. 4
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs
  22. 2
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs
  23. 12
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs
  24. 5
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionPropertyInfoExtensions.cs
  25. 6
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionInfoEfCoreMappingOptions.cs
  26. 12
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfoEfCoreMappingOptions.cs
  27. 8
      framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs
  28. 2
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs
  29. 2
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs
  30. 2
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs

2
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/ISupportsExplicitLoading.cs

@ -18,7 +18,7 @@ public interface ISupportsExplicitLoading<TEntity>
Task EnsurePropertyLoadedAsync<TProperty>( Task EnsurePropertyLoadedAsync<TProperty>(
TEntity entity, TEntity entity,
Expression<Func<TEntity, TProperty>> propertyExpression, Expression<Func<TEntity, TProperty?>> propertyExpression,
CancellationToken cancellationToken) CancellationToken cancellationToken)
where TProperty : class; where TProperty : class;
} }

2
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<TEntity, TKey, TProperty>( public async static Task EnsurePropertyLoadedAsync<TEntity, TKey, TProperty>(
this IBasicRepository<TEntity, TKey> repository, this IBasicRepository<TEntity, TKey> repository,
TEntity entity, TEntity entity,
Expression<Func<TEntity, TProperty>> propertyExpression, Expression<Func<TEntity, TProperty?>> propertyExpression,
CancellationToken cancellationToken = default CancellationToken cancellationToken = default
) )
where TEntity : class, IEntity<TKey> where TEntity : class, IEntity<TKey>

2
framework/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpEfCoreServiceCollectionExtensions.cs

@ -13,7 +13,7 @@ public static class AbpEfCoreServiceCollectionExtensions
{ {
public static IServiceCollection AddAbpDbContext<TDbContext>( public static IServiceCollection AddAbpDbContext<TDbContext>(
this IServiceCollection services, this IServiceCollection services,
Action<IAbpDbContextRegistrationOptionsBuilder> optionsBuilder = null) Action<IAbpDbContextRegistrationOptionsBuilder>? optionsBuilder = null)
where TDbContext : AbpDbContext<TDbContext> where TDbContext : AbpDbContext<TDbContext>
{ {
services.AddMemoryCache(); services.AddMemoryCache();

2
framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj

@ -5,6 +5,8 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net7.0</TargetFramework> <TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<WarningsAsErrors>Nullable</WarningsAsErrors>
<AssemblyName>Volo.Abp.EntityFrameworkCore</AssemblyName> <AssemblyName>Volo.Abp.EntityFrameworkCore</AssemblyName>
<PackageId>Volo.Abp.EntityFrameworkCore</PackageId> <PackageId>Volo.Abp.EntityFrameworkCore</PackageId>
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback> <AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>

20
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs

@ -26,11 +26,11 @@ public class EfCoreRepository<TDbContext, TEntity> : RepositoryBase<TEntity>, IE
protected virtual TDbContext DbContext => GetDbContext(); protected virtual TDbContext DbContext => GetDbContext();
[Obsolete("Use GetDbContextAsync() method.")] [Obsolete("Use GetDbContextAsync() method.")]
DbContext IEfCoreRepository<TEntity>.DbContext => GetDbContext() as DbContext; DbContext IEfCoreRepository<TEntity>.DbContext => (GetDbContext() as DbContext)!;
async Task<DbContext> IEfCoreRepository<TEntity>.GetDbContextAsync() async Task<DbContext> IEfCoreRepository<TEntity>.GetDbContextAsync()
{ {
return await GetDbContextAsync() as DbContext; return (await GetDbContextAsync() as DbContext)!;
} }
[Obsolete("Use GetDbContextAsync() method.")] [Obsolete("Use GetDbContextAsync() method.")]
@ -80,7 +80,7 @@ public class EfCoreRepository<TDbContext, TEntity> : RepositoryBase<TEntity>, IE
return (await GetDbContextAsync()).Database.GetDbConnection(); return (await GetDbContextAsync()).Database.GetDbConnection();
} }
protected async Task<IDbTransaction> GetDbTransactionAsync() protected async Task<IDbTransaction?> GetDbTransactionAsync()
{ {
return (await GetDbContextAsync()).Database.CurrentTransaction?.GetDbTransaction(); return (await GetDbContextAsync()).Database.CurrentTransaction?.GetDbTransaction();
} }
@ -92,7 +92,7 @@ public class EfCoreRepository<TDbContext, TEntity> : RepositoryBase<TEntity>, IE
public virtual IGuidGenerator GuidGenerator => LazyServiceProvider.LazyGetService<IGuidGenerator>(SimpleGuidGenerator.Instance); public virtual IGuidGenerator GuidGenerator => LazyServiceProvider.LazyGetService<IGuidGenerator>(SimpleGuidGenerator.Instance);
public IEfCoreBulkOperationProvider BulkOperationProvider => LazyServiceProvider.LazyGetService<IEfCoreBulkOperationProvider>(); public IEfCoreBulkOperationProvider? BulkOperationProvider => LazyServiceProvider.LazyGetService<IEfCoreBulkOperationProvider>();
public EfCoreRepository(IDbContextProvider<TDbContext> dbContextProvider) public EfCoreRepository(IDbContextProvider<TDbContext> dbContextProvider)
{ {
@ -301,7 +301,7 @@ public class EfCoreRepository<TDbContext, TEntity> : RepositoryBase<TEntity>, IE
await (await GetDbContextAsync()).SaveChangesAsync(cancellationToken); await (await GetDbContextAsync()).SaveChangesAsync(cancellationToken);
} }
public async override Task<TEntity> FindAsync( public async override Task<TEntity?> FindAsync(
Expression<Func<TEntity, bool>> predicate, Expression<Func<TEntity, bool>> predicate,
bool includeDetails = true, bool includeDetails = true,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -353,7 +353,7 @@ public class EfCoreRepository<TDbContext, TEntity> : RepositoryBase<TEntity>, IE
public virtual async Task EnsurePropertyLoadedAsync<TProperty>( public virtual async Task EnsurePropertyLoadedAsync<TProperty>(
TEntity entity, TEntity entity,
Expression<Func<TEntity, TProperty>> propertyExpression, Expression<Func<TEntity, TProperty?>> propertyExpression,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
where TProperty : class where TProperty : class
{ {
@ -464,13 +464,13 @@ public class EfCoreRepository<TDbContext, TEntity, TKey> : EfCoreRepository<TDbC
return entity; return entity;
} }
public virtual async Task<TEntity> FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default) public virtual async Task<TEntity?> FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default)
{ {
return includeDetails 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() : !ShouldTrackingEntityChange()
? await (await GetQueryableAsync()).OrderBy(e => e.Id).FirstOrDefaultAsync(e => e.Id.Equals(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)); : await (await GetDbSetAsync()).FindAsync(new object[] {id!}, GetCancellationToken(cancellationToken));
} }
public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default) public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default)

28
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs

@ -37,7 +37,7 @@ namespace Volo.Abp.EntityFrameworkCore;
public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext, ITransientDependency public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext, ITransientDependency
where TDbContext : DbContext where TDbContext : DbContext
{ {
public IAbpLazyServiceProvider LazyServiceProvider { get; set; } public IAbpLazyServiceProvider LazyServiceProvider { get; set; } = default!;
protected virtual Guid? CurrentTenantId => CurrentTenant?.Id; protected virtual Guid? CurrentTenantId => CurrentTenant?.Id;
@ -74,21 +74,21 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext,
.GetMethod( .GetMethod(
nameof(ConfigureBaseProperties), nameof(ConfigureBaseProperties),
BindingFlags.Instance | BindingFlags.NonPublic BindingFlags.Instance | BindingFlags.NonPublic
); )!;
private static readonly MethodInfo ConfigureValueConverterMethodInfo private static readonly MethodInfo ConfigureValueConverterMethodInfo
= typeof(AbpDbContext<TDbContext>) = typeof(AbpDbContext<TDbContext>)
.GetMethod( .GetMethod(
nameof(ConfigureValueConverter), nameof(ConfigureValueConverter),
BindingFlags.Instance | BindingFlags.NonPublic BindingFlags.Instance | BindingFlags.NonPublic
); )!;
private static readonly MethodInfo ConfigureValueGeneratedMethodInfo private static readonly MethodInfo ConfigureValueGeneratedMethodInfo
= typeof(AbpDbContext<TDbContext>) = typeof(AbpDbContext<TDbContext>)
.GetMethod( .GetMethod(
nameof(ConfigureValueGenerated), nameof(ConfigureValueGenerated),
BindingFlags.Instance | BindingFlags.NonPublic BindingFlags.Instance | BindingFlags.NonPublic
); )!;
protected AbpDbContext(DbContextOptions<TDbContext> options) protected AbpDbContext(DbContextOptions<TDbContext> options)
: base(options) : base(options)
@ -157,7 +157,7 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext,
try try
{ {
var auditLog = AuditingManager?.Current?.Log; var auditLog = AuditingManager?.Current?.Log;
List<EntityChangeInfo> entityChangeList = null; List<EntityChangeInfo>? entityChangeList = null;
if (auditLog != null) if (auditLog != null)
{ {
entityChangeList = EntityHistoryHelper.CreateChangeList(ChangeTracker.Entries().ToList()); entityChangeList = EntityHistoryHelper.CreateChangeList(ChangeTracker.Entries().ToList());
@ -174,7 +174,7 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext,
if (entityChangeList != null) if (entityChangeList != null)
{ {
EntityHistoryHelper.UpdateChangeList(entityChangeList); EntityHistoryHelper.UpdateChangeList(entityChangeList);
auditLog.EntityChanges.AddRange(entityChangeList); auditLog!.EntityChanges.AddRange(entityChangeList);
Logger.LogDebug($"Added {entityChangeList.Count} entity changes to the current audit log"); Logger.LogDebug($"Added {entityChangeList.Count} entity changes to the current audit log");
} }
@ -249,13 +249,13 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext,
} }
} }
protected virtual void ChangeTracker_Tracked(object sender, EntityTrackedEventArgs e) protected virtual void ChangeTracker_Tracked(object? sender, EntityTrackedEventArgs e)
{ {
FillExtraPropertiesForTrackedEntities(e); FillExtraPropertiesForTrackedEntities(e);
PublishEventsForTrackedEntity(e.Entry); PublishEventsForTrackedEntity(e.Entry);
} }
protected virtual void ChangeTracker_StateChanged(object sender, EntityStateChangedEventArgs e) protected virtual void ChangeTracker_StateChanged(object? sender, EntityStateChangedEventArgs e)
{ {
PublishEventsForTrackedEntity(e.Entry); PublishEventsForTrackedEntity(e.Entry);
} }
@ -453,11 +453,11 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext,
if (conversionType == typeof(Guid)) if (conversionType == typeof(Guid))
{ {
entryProperty.CurrentValue = TypeDescriptor.GetConverter(conversionType).ConvertFromInvariantString(entityProperty.ToString()); entryProperty.CurrentValue = TypeDescriptor.GetConverter(conversionType).ConvertFromInvariantString(entityProperty.ToString()!);
} }
else if (conversionType.IsEnum) else if (conversionType.IsEnum)
{ {
entryProperty.CurrentValue = Enum.Parse(conversionType, entityProperty.ToString(), ignoreCase: true); entryProperty.CurrentValue = Enum.Parse(conversionType, entityProperty.ToString()!, ignoreCase: true);
} }
else else
{ {
@ -560,7 +560,7 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext,
return; return;
} }
var idProperty = entry.Property("Id").Metadata.PropertyInfo; var idProperty = entry.Property("Id").Metadata.PropertyInfo!;
//Check for DatabaseGeneratedAttribute //Check for DatabaseGeneratedAttribute
var dbGeneratedAttr = ReflectionHelper var dbGeneratedAttr = ReflectionHelper
@ -669,7 +669,7 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext,
} }
var idPropertyBuilder = modelBuilder.Entity<TEntity>().Property(x => ((IEntity<Guid>)x).Id); var idPropertyBuilder = modelBuilder.Entity<TEntity>().Property(x => ((IEntity<Guid>)x).Id);
if (idPropertyBuilder.Metadata.PropertyInfo.IsDefined(typeof(DatabaseGeneratedAttribute), true)) if (idPropertyBuilder.Metadata.PropertyInfo!.IsDefined(typeof(DatabaseGeneratedAttribute), true))
{ {
return; return;
} }
@ -692,10 +692,10 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext,
return false; return false;
} }
protected virtual Expression<Func<TEntity, bool>> CreateFilterExpression<TEntity>() protected virtual Expression<Func<TEntity, bool>>? CreateFilterExpression<TEntity>()
where TEntity : class where TEntity : class
{ {
Expression<Func<TEntity, bool>> expression = null; Expression<Func<TEntity, bool>>? expression = null;
if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity))) if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity)))
{ {

2
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContextOptions.cs

@ -12,7 +12,7 @@ public class AbpDbContextOptions
{ {
internal List<Action<AbpDbContextConfigurationContext>> DefaultPreConfigureActions { get; } internal List<Action<AbpDbContextConfigurationContext>> DefaultPreConfigureActions { get; }
internal Action<AbpDbContextConfigurationContext> DefaultConfigureAction { get; set; } internal Action<AbpDbContextConfigurationContext>? DefaultConfigureAction { get; set; }
internal Dictionary<Type, List<object>> PreConfigureActions { get; } internal Dictionary<Type, List<object>> PreConfigureActions { get; }

12
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 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 DbContextOptionsBuilder DbContextOptions { get; protected set; }
public AbpDbContextConfigurationContext( public AbpDbContextConfigurationContext(
[NotNull] string connectionString, [NotNull] string connectionString,
[NotNull] IServiceProvider serviceProvider, [NotNull] IServiceProvider serviceProvider,
[CanBeNull] string connectionStringName, string? connectionStringName,
[CanBeNull] DbConnection existingConnection) DbConnection? existingConnection)
{ {
ConnectionString = connectionString; ConnectionString = connectionString;
ServiceProvider = serviceProvider; ServiceProvider = serviceProvider;
@ -45,8 +45,8 @@ public class AbpDbContextConfigurationContext<TDbContext> : AbpDbContextConfigur
public AbpDbContextConfigurationContext( public AbpDbContextConfigurationContext(
string connectionString, string connectionString,
[NotNull] IServiceProvider serviceProvider, [NotNull] IServiceProvider serviceProvider,
[CanBeNull] string connectionStringName, string? connectionStringName,
[CanBeNull] DbConnection existingConnection) DbConnection? existingConnection)
: base( : base(
connectionString, connectionString,
serviceProvider, serviceProvider,

8
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/AbpEntityOptions.cs

@ -11,7 +11,7 @@ public class AbpEntityOptions<TEntity>
{ {
public static AbpEntityOptions<TEntity> Empty { get; } = new AbpEntityOptions<TEntity>(); public static AbpEntityOptions<TEntity> Empty { get; } = new AbpEntityOptions<TEntity>();
public Func<IQueryable<TEntity>, IQueryable<TEntity>> DefaultWithDetailsFunc { get; set; } public Func<IQueryable<TEntity>, IQueryable<TEntity>>? DefaultWithDetailsFunc { get; set; }
} }
public class AbpEntityOptions public class AbpEntityOptions
@ -23,7 +23,7 @@ public class AbpEntityOptions
_options = new Dictionary<Type, object>(); _options = new Dictionary<Type, object>();
} }
public AbpEntityOptions<TEntity> GetOrNull<TEntity>() public AbpEntityOptions<TEntity>? GetOrNull<TEntity>()
where TEntity : IEntity where TEntity : IEntity
{ {
return _options.GetOrDefault(typeof(TEntity)) as AbpEntityOptions<TEntity>; return _options.GetOrDefault(typeof(TEntity)) as AbpEntityOptions<TEntity>;
@ -35,10 +35,10 @@ public class AbpEntityOptions
Check.NotNull(optionsAction, nameof(optionsAction)); Check.NotNull(optionsAction, nameof(optionsAction));
optionsAction( optionsAction(
_options.GetOrAdd( (_options.GetOrAdd(
typeof(TEntity), typeof(TEntity),
() => new AbpEntityOptions<TEntity>() () => new AbpEntityOptions<TEntity>()
) as AbpEntityOptions<TEntity> ) as AbpEntityOptions<TEntity>)!
); );
} }
} }

4
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextCreationContext.cs

@ -6,14 +6,14 @@ namespace Volo.Abp.EntityFrameworkCore.DependencyInjection;
public class DbContextCreationContext public class DbContextCreationContext
{ {
public static DbContextCreationContext Current => _current.Value; public static DbContextCreationContext Current => _current.Value!;
private static readonly AsyncLocal<DbContextCreationContext> _current = new AsyncLocal<DbContextCreationContext>(); private static readonly AsyncLocal<DbContextCreationContext> _current = new AsyncLocal<DbContextCreationContext>();
public string ConnectionStringName { get; } public string ConnectionStringName { get; }
public string ConnectionString { get; } public string ConnectionString { get; }
public DbConnection ExistingConnection { get; internal set; } public DbConnection? ExistingConnection { get; internal set; }
public DbContextCreationContext(string connectionStringName, string connectionString) public DbContextCreationContext(string connectionStringName, string connectionString)
{ {

2
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)); var preConfigureActions = options.PreConfigureActions.GetOrDefault(typeof(TDbContext));
if (!preConfigureActions.IsNullOrEmpty()) if (!preConfigureActions.IsNullOrEmpty())
{ {
foreach (var preConfigureAction in preConfigureActions) foreach (var preConfigureAction in preConfigureActions!)
{ {
((Action<AbpDbContextConfigurationContext<TDbContext>>)preConfigureAction).Invoke(context); ((Action<AbpDbContextConfigurationContext<TDbContext>>)preConfigureAction).Invoke(context);
} }

6
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 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; } public DateTime CreationTime { get; private set; }

4
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 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; } public DateTime CreationTime { get; private set; }

12
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs

@ -68,12 +68,12 @@ public class EfCoreAsyncQueryableProvider : IAsyncQueryableProvider, ISingletonD
return queryable.FirstAsync(predicate, cancellationToken); return queryable.FirstAsync(predicate, cancellationToken);
} }
public Task<T> FirstOrDefaultAsync<T>(IQueryable<T> queryable, CancellationToken cancellationToken = default) public Task<T?> FirstOrDefaultAsync<T>(IQueryable<T> queryable, CancellationToken cancellationToken = default)
{ {
return queryable.FirstOrDefaultAsync(cancellationToken); return queryable.FirstOrDefaultAsync(cancellationToken);
} }
public Task<T> FirstOrDefaultAsync<T>(IQueryable<T> queryable, Expression<Func<T, bool>> predicate, public Task<T?> FirstOrDefaultAsync<T>(IQueryable<T> queryable, Expression<Func<T, bool>> predicate,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return queryable.FirstOrDefaultAsync(predicate, cancellationToken); return queryable.FirstOrDefaultAsync(predicate, cancellationToken);
@ -89,12 +89,12 @@ public class EfCoreAsyncQueryableProvider : IAsyncQueryableProvider, ISingletonD
return queryable.LastAsync(predicate, cancellationToken); return queryable.LastAsync(predicate, cancellationToken);
} }
public Task<T> LastOrDefaultAsync<T>(IQueryable<T> queryable, CancellationToken cancellationToken = default) public Task<T?> LastOrDefaultAsync<T>(IQueryable<T> queryable, CancellationToken cancellationToken = default)
{ {
return queryable.LastOrDefaultAsync(cancellationToken); return queryable.LastOrDefaultAsync(cancellationToken);
} }
public Task<T> LastOrDefaultAsync<T>(IQueryable<T> queryable, Expression<Func<T, bool>> predicate, public Task<T?> LastOrDefaultAsync<T>(IQueryable<T> queryable, Expression<Func<T, bool>> predicate,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return queryable.LastOrDefaultAsync(predicate, cancellationToken); return queryable.LastOrDefaultAsync(predicate, cancellationToken);
@ -110,12 +110,12 @@ public class EfCoreAsyncQueryableProvider : IAsyncQueryableProvider, ISingletonD
return queryable.SingleAsync(predicate, cancellationToken); return queryable.SingleAsync(predicate, cancellationToken);
} }
public Task<T> SingleOrDefaultAsync<T>(IQueryable<T> queryable, CancellationToken cancellationToken = default) public Task<T?> SingleOrDefaultAsync<T>(IQueryable<T> queryable, CancellationToken cancellationToken = default)
{ {
return queryable.SingleOrDefaultAsync(cancellationToken); return queryable.SingleOrDefaultAsync(cancellationToken);
} }
public Task<T> SingleOrDefaultAsync<T>(IQueryable<T> queryable, Expression<Func<T, bool>> predicate, public Task<T?> SingleOrDefaultAsync<T>(IQueryable<T> queryable, Expression<Func<T, bool>> predicate,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return queryable.SingleOrDefaultAsync(predicate, cancellationToken); return queryable.SingleOrDefaultAsync(predicate, cancellationToken);

13
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs

@ -69,8 +69,7 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency
return list; return list;
} }
[CanBeNull] protected virtual EntityChangeInfo? CreateEntityChangeOrNull(EntityEntry entityEntry)
protected virtual EntityChangeInfo CreateEntityChangeOrNull(EntityEntry entityEntry)
{ {
var entity = entityEntry.Entity; 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)) if ((entityAsObj is IEntity entity))
{ {
@ -370,10 +369,10 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency
// Add foreign key // Add foreign key
entityChange.PropertyChanges.Add(new EntityPropertyChangeInfo entityChange.PropertyChanges.Add(new EntityPropertyChangeInfo
{ {
NewValue = JsonSerializer.Serialize(propertyEntry.CurrentValue), NewValue = JsonSerializer.Serialize(propertyEntry.CurrentValue!),
OriginalValue = JsonSerializer.Serialize(propertyEntry.OriginalValue), OriginalValue = JsonSerializer.Serialize(propertyEntry.OriginalValue!),
PropertyName = property.Name, 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) if (propertyChange.OriginalValue == propertyChange.NewValue)
{ {
var newValue = JsonSerializer.Serialize(propertyEntry.CurrentValue); var newValue = JsonSerializer.Serialize(propertyEntry.CurrentValue!);
if (newValue == propertyChange.NewValue) if (newValue == propertyChange.NewValue)
{ {
// No change // No change

12
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IEfCoreDbContext.cs

@ -60,17 +60,17 @@ public interface IEfCoreDbContext : IDisposable, IInfrastructure<IServiceProvide
EntityEntry Entry([NotNull] object entity); EntityEntry Entry([NotNull] object entity);
object Find([NotNull] Type entityType, [NotNull] params object[] keyValues); object? Find([NotNull] Type entityType, [NotNull] params object[] keyValues);
TEntity Find<TEntity>([NotNull] params object[] keyValues) where TEntity : class; TEntity? Find<TEntity>([NotNull] params object[] keyValues) where TEntity : class;
ValueTask<object> FindAsync([NotNull] Type entityType, [NotNull] object[] keyValues, CancellationToken cancellationToken); ValueTask<object?> FindAsync([NotNull] Type entityType, [NotNull] object[] keyValues, CancellationToken cancellationToken);
ValueTask<TEntity> FindAsync<TEntity>([NotNull] object[] keyValues, CancellationToken cancellationToken) where TEntity : class; ValueTask<TEntity?> FindAsync<TEntity>([NotNull] object[] keyValues, CancellationToken cancellationToken) where TEntity : class;
ValueTask<TEntity> FindAsync<TEntity>([NotNull] params object[] keyValues) where TEntity : class; ValueTask<TEntity?> FindAsync<TEntity>([NotNull] params object[] keyValues) where TEntity : class;
ValueTask<object> FindAsync([NotNull] Type entityType, [NotNull] params object[] keyValues); ValueTask<object?> FindAsync([NotNull] Type entityType, [NotNull] params object[] keyValues);
EntityEntry<TEntity> Remove<TEntity>([NotNull] TEntity entity) where TEntity : class; EntityEntry<TEntity> Remove<TEntity>([NotNull] TEntity entity) where TEntity : class;

4
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Migrations/EfCoreDatabaseMigrationEventHandlerBase.cs

@ -210,7 +210,7 @@ public abstract class EfCoreDatabaseMigrationEventHandlerBase<TDbContext> :
else else
{ {
var tenantConfiguration = await TenantStore.FindAsync(tenantId.Value); var tenantConfiguration = await TenantStore.FindAsync(tenantId.Value);
if (!tenantConfiguration.ConnectionStrings.Default.IsNullOrWhiteSpace() || if (!tenantConfiguration!.ConnectionStrings!.Default.IsNullOrWhiteSpace() ||
!tenantConfiguration.ConnectionStrings.GetOrDefault(DatabaseName).IsNullOrWhiteSpace()) !tenantConfiguration.ConnectionStrings.GetOrDefault(DatabaseName).IsNullOrWhiteSpace())
{ {
//Migrating the tenant database (only if tenant has a separate database) //Migrating the tenant database (only if tenant has a separate database)
@ -301,7 +301,7 @@ public abstract class EfCoreDatabaseMigrationEventHandlerBase<TDbContext> :
return 0; return 0;
} }
return int.Parse(tryCountAsString); return int.Parse(tryCountAsString!);
} }
private static void SetEventTryCount(EtoBase eventData, int count) private static void SetEventTryCount(EtoBase eventData, int count)

8
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpModelBuilderConfigurationOptions.cs

@ -12,14 +12,14 @@ public class AbpModelBuilderConfigurationOptions
_tablePrefix = value; _tablePrefix = value;
} }
} }
private string _tablePrefix;
[CanBeNull] private string _tablePrefix = default!;
public string Schema { get; set; }
public string? Schema { get; set; }
public AbpModelBuilderConfigurationOptions( public AbpModelBuilderConfigurationOptions(
[NotNull] string tablePrefix = "", [NotNull] string tablePrefix = "",
[CanBeNull] string schema = null) string? schema = null)
{ {
Check.NotNull(tablePrefix, nameof(tablePrefix)); Check.NotNull(tablePrefix, nameof(tablePrefix));

2
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/QueryFilterExpressionHelper.cs

@ -29,7 +29,7 @@ public static class QueryFilterExpressionHelper
_newValue = newValue; _newValue = newValue;
} }
public override Expression Visit(Expression node) public override Expression? Visit(Expression? node)
{ {
return node == _oldValue ? _newValue : base.Visit(node); return node == _oldValue ? _newValue : base.Visit(node);
} }

2
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueComparers/ExtraPropertyDictionaryValueComparer.cs

@ -9,7 +9,7 @@ public class ExtraPropertyDictionaryValueComparer : ValueComparer<ExtraPropertyD
{ {
public ExtraPropertyDictionaryValueComparer() public ExtraPropertyDictionaryValueComparer()
: base( : base(
(d1, d2) => d1.SequenceEqual(d2), (d1, d2) => d1!.SequenceEqual(d2!),
d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())), d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())),
d => new ExtraPropertyDictionary(d)) d => new ExtraPropertyDictionary(d))
{ {

4
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs

@ -7,7 +7,7 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters;
public class AbpDateTimeValueConverter : ValueConverter<DateTime, DateTime> public class AbpDateTimeValueConverter : ValueConverter<DateTime, DateTime>
{ {
public AbpDateTimeValueConverter(IClock clock, [CanBeNull] ConverterMappingHints mappingHints = null) public AbpDateTimeValueConverter(IClock clock, ConverterMappingHints? mappingHints = null)
: base( : base(
x => clock.Normalize(x), x => clock.Normalize(x),
x => clock.Normalize(x), mappingHints) x => clock.Normalize(x), mappingHints)
@ -17,7 +17,7 @@ public class AbpDateTimeValueConverter : ValueConverter<DateTime, DateTime>
public class AbpNullableDateTimeValueConverter : ValueConverter<DateTime?, DateTime?> public class AbpNullableDateTimeValueConverter : ValueConverter<DateTime?, DateTime?>
{ {
public AbpNullableDateTimeValueConverter(IClock clock, [CanBeNull] ConverterMappingHints mappingHints = null) public AbpNullableDateTimeValueConverter(IClock clock, ConverterMappingHints? mappingHints = null)
: base( : base(
x => x.HasValue ? clock.Normalize(x.Value) : x, x => x.HasValue ? clock.Normalize(x.Value) : x,
x => x.HasValue ? clock.Normalize(x.Value) : x, mappingHints) x => x.HasValue ? clock.Normalize(x.Value) : x, mappingHints)

2
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs

@ -29,6 +29,6 @@ public class AbpJsonValueConverter<TPropertyType> : ValueConverter<TPropertyType
private static TPropertyType DeserializeObject(string s) private static TPropertyType DeserializeObject(string s)
{ {
return JsonSerializer.Deserialize<TPropertyType>(s, DeserializeOptions); return JsonSerializer.Deserialize<TPropertyType>(s, DeserializeOptions)!;
} }
} }

12
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs

@ -19,9 +19,9 @@ public class ExtraPropertiesValueConverter : ValueConverter<ExtraPropertyDiction
} }
private static string SerializeObject(ExtraPropertyDictionary extraProperties, Type entityType) private static string SerializeObject(ExtraPropertyDictionary extraProperties, Type? entityType)
{ {
var copyDictionary = new Dictionary<string, object>(extraProperties); var copyDictionary = new Dictionary<string, object?>(extraProperties);
if (entityType != null) if (entityType != null)
{ {
@ -49,7 +49,7 @@ public class ExtraPropertiesValueConverter : ValueConverter<ExtraPropertyDiction
} }
}; };
private static ExtraPropertyDictionary DeserializeObject(string extraPropertiesAsJson, Type entityType) private static ExtraPropertyDictionary DeserializeObject(string extraPropertiesAsJson, Type? entityType)
{ {
if (extraPropertiesAsJson.IsNullOrEmpty() || extraPropertiesAsJson == "{}") if (extraPropertiesAsJson.IsNullOrEmpty() || extraPropertiesAsJson == "{}")
{ {
@ -66,7 +66,7 @@ public class ExtraPropertiesValueConverter : ValueConverter<ExtraPropertyDiction
{ {
foreach (var property in objectExtension.GetProperties()) foreach (var property in objectExtension.GetProperties())
{ {
dictionary[property.Name] = GetNormalizedValue(dictionary, property); dictionary[property.Name] = GetNormalizedValue(dictionary!, property);
} }
} }
} }
@ -74,7 +74,7 @@ public class ExtraPropertiesValueConverter : ValueConverter<ExtraPropertyDiction
return dictionary; return dictionary;
} }
private static object GetNormalizedValue( private static object? GetNormalizedValue(
Dictionary<string, object> dictionary, Dictionary<string, object> dictionary,
ObjectExtensionPropertyInfo property) ObjectExtensionPropertyInfo property)
{ {
@ -88,7 +88,7 @@ public class ExtraPropertiesValueConverter : ValueConverter<ExtraPropertyDiction
{ {
if (property.Type.IsEnum) if (property.Type.IsEnum)
{ {
return Enum.Parse(property.Type, value.ToString(), true); return Enum.Parse(property.Type, value.ToString()!, true);
} }
//return Convert.ChangeType(value, property.Type); //return Convert.ChangeType(value, property.Type);

5
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionPropertyInfoExtensions.cs

@ -43,7 +43,7 @@ public static class EfCoreObjectExtensionPropertyInfoExtensions
[NotNull] [NotNull]
public static ObjectExtensionPropertyInfo MapEfCore( public static ObjectExtensionPropertyInfo MapEfCore(
[NotNull] this ObjectExtensionPropertyInfo propertyExtension, [NotNull] this ObjectExtensionPropertyInfo propertyExtension,
[CanBeNull] Action<EntityTypeBuilder, PropertyBuilder> entityTypeAndPropertyBuildAction) Action<EntityTypeBuilder, PropertyBuilder>? entityTypeAndPropertyBuildAction)
{ {
Check.NotNull(propertyExtension, nameof(propertyExtension)); Check.NotNull(propertyExtension, nameof(propertyExtension));
@ -56,8 +56,7 @@ public static class EfCoreObjectExtensionPropertyInfoExtensions
return propertyExtension; return propertyExtension;
} }
[CanBeNull] public static ObjectExtensionPropertyInfoEfCoreMappingOptions? GetEfCoreMappingOrNull(
public static ObjectExtensionPropertyInfoEfCoreMappingOptions GetEfCoreMappingOrNull(
[NotNull] this ObjectExtensionPropertyInfo propertyExtension) [NotNull] this ObjectExtensionPropertyInfo propertyExtension)
{ {
Check.NotNull(propertyExtension, nameof(propertyExtension)); Check.NotNull(propertyExtension, nameof(propertyExtension));

6
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionInfoEfCoreMappingOptions.cs

@ -10,11 +10,9 @@ public class ObjectExtensionInfoEfCoreMappingOptions
[NotNull] [NotNull]
public ObjectExtensionInfo ObjectExtension { get; } public ObjectExtensionInfo ObjectExtension { get; }
[CanBeNull] public Action<EntityTypeBuilder>? EntityTypeBuildAction { get; set; }
public Action<EntityTypeBuilder> EntityTypeBuildAction { get; set; }
[CanBeNull] public Action<ModelBuilder>? ModelBuildAction { get; set; }
public Action<ModelBuilder> ModelBuildAction { get; set; }
public ObjectExtensionInfoEfCoreMappingOptions( public ObjectExtensionInfoEfCoreMappingOptions(
[NotNull] ObjectExtensionInfo objectExtension, [NotNull] ObjectExtensionInfo objectExtension,

12
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfoEfCoreMappingOptions.cs

@ -13,17 +13,15 @@ public class ObjectExtensionPropertyInfoEfCoreMappingOptions
public ObjectExtensionInfo ObjectExtension => ExtensionProperty.ObjectExtension; public ObjectExtensionInfo ObjectExtension => ExtensionProperty.ObjectExtension;
[Obsolete("Use EntityTypeAndPropertyBuildAction property.")] [Obsolete("Use EntityTypeAndPropertyBuildAction property.")]
[CanBeNull] public Action<PropertyBuilder>? PropertyBuildAction { get; set; }
public Action<PropertyBuilder> PropertyBuildAction { get; set; }
[CanBeNull] public Action<EntityTypeBuilder, PropertyBuilder>? EntityTypeAndPropertyBuildAction { get; set; }
public Action<EntityTypeBuilder, PropertyBuilder> EntityTypeAndPropertyBuildAction { get; set; }
[Obsolete("Use other constructors.")] [Obsolete("Use other constructors.")]
public ObjectExtensionPropertyInfoEfCoreMappingOptions( public ObjectExtensionPropertyInfoEfCoreMappingOptions(
[NotNull] ObjectExtensionPropertyInfo extensionProperty, [NotNull] ObjectExtensionPropertyInfo extensionProperty,
[CanBeNull] Action<PropertyBuilder> propertyBuildAction = null, Action<PropertyBuilder>? propertyBuildAction = null,
[CanBeNull] Action<EntityTypeBuilder, PropertyBuilder> entityTypeAndPropertyBuildAction = null) Action<EntityTypeBuilder, PropertyBuilder>? entityTypeAndPropertyBuildAction = null)
{ {
ExtensionProperty = Check.NotNull(extensionProperty, nameof(extensionProperty)); ExtensionProperty = Check.NotNull(extensionProperty, nameof(extensionProperty));
@ -39,7 +37,7 @@ public class ObjectExtensionPropertyInfoEfCoreMappingOptions
public ObjectExtensionPropertyInfoEfCoreMappingOptions( public ObjectExtensionPropertyInfoEfCoreMappingOptions(
[NotNull] ObjectExtensionPropertyInfo extensionProperty, [NotNull] ObjectExtensionPropertyInfo extensionProperty,
[CanBeNull] Action<EntityTypeBuilder, PropertyBuilder> entityTypeAndPropertyBuildAction) Action<EntityTypeBuilder, PropertyBuilder>? entityTypeAndPropertyBuildAction)
{ {
ExtensionProperty = Check.NotNull(extensionProperty, nameof(extensionProperty)); ExtensionProperty = Check.NotNull(extensionProperty, nameof(extensionProperty));

8
framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs

@ -131,7 +131,7 @@ public class UnitOfWorkMongoDbContextProvider<TMongoDbContext> : IMongoDbContext
var client = CreateMongoClient(mongoUrl); var client = CreateMongoClient(mongoUrl);
var database = client.GetDatabase(databaseName); var database = client.GetDatabase(databaseName);
if (unitOfWork.Options!.IsTransactional) if (unitOfWork.Options.IsTransactional)
{ {
return CreateDbContextWithTransaction(unitOfWork, mongoUrl, client, database); return CreateDbContextWithTransaction(unitOfWork, mongoUrl, client, database);
} }
@ -151,7 +151,7 @@ public class UnitOfWorkMongoDbContextProvider<TMongoDbContext> : IMongoDbContext
var client = CreateMongoClient(mongoUrl); var client = CreateMongoClient(mongoUrl);
var database = client.GetDatabase(databaseName); var database = client.GetDatabase(databaseName);
if (unitOfWork.Options!.IsTransactional) if (unitOfWork.Options.IsTransactional)
{ {
return await CreateDbContextWithTransactionAsync( return await CreateDbContextWithTransactionAsync(
unitOfWork, unitOfWork,
@ -183,7 +183,7 @@ public class UnitOfWorkMongoDbContextProvider<TMongoDbContext> : IMongoDbContext
{ {
var session = client.StartSession(); var session = client.StartSession();
if (unitOfWork.Options!.Timeout.HasValue) if (unitOfWork.Options.Timeout.HasValue)
{ {
session.AdvanceOperationTime(new BsonTimestamp(unitOfWork.Options.Timeout.Value)); session.AdvanceOperationTime(new BsonTimestamp(unitOfWork.Options.Timeout.Value));
} }
@ -233,7 +233,7 @@ public class UnitOfWorkMongoDbContextProvider<TMongoDbContext> : IMongoDbContext
{ {
var session = await client.StartSessionAsync(cancellationToken: GetCancellationToken(cancellationToken)); 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)); session.AdvanceOperationTime(new BsonTimestamp(unitOfWork.Options.Timeout.Value));
} }

2
framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs

@ -10,7 +10,7 @@ internal class ChildUnitOfWork : IUnitOfWork
{ {
public Guid Id => _parent.Id; public Guid Id => _parent.Id;
public IAbpUnitOfWorkOptions? Options => _parent.Options; public IAbpUnitOfWorkOptions Options => _parent.Options;
public IUnitOfWork? Outer => _parent.Outer; public IUnitOfWork? Outer => _parent.Outer;

2
framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs

@ -17,7 +17,7 @@ public interface IUnitOfWork : IDatabaseApiContainer, ITransactionApiContainer,
event EventHandler<UnitOfWorkEventArgs> Disposed; event EventHandler<UnitOfWorkEventArgs> Disposed;
IAbpUnitOfWorkOptions? Options { get; } IAbpUnitOfWorkOptions Options { get; }
IUnitOfWork? Outer { get; } IUnitOfWork? Outer { get; }

2
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 Guid Id { get; } = Guid.NewGuid();
public IAbpUnitOfWorkOptions? Options { get; private set; } public IAbpUnitOfWorkOptions Options { get; private set; } = default!;
public IUnitOfWork? Outer { get; private set; } public IUnitOfWork? Outer { get; private set; }

Loading…
Cancel
Save