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>(
TEntity entity,
Expression<Func<TEntity, TProperty>> propertyExpression,
Expression<Func<TEntity, TProperty?>> propertyExpression,
CancellationToken cancellationToken)
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>(
this IBasicRepository<TEntity, TKey> repository,
TEntity entity,
Expression<Func<TEntity, TProperty>> propertyExpression,
Expression<Func<TEntity, TProperty?>> propertyExpression,
CancellationToken cancellationToken = default
)
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>(
this IServiceCollection services,
Action<IAbpDbContextRegistrationOptionsBuilder> optionsBuilder = null)
Action<IAbpDbContextRegistrationOptionsBuilder>? optionsBuilder = null)
where TDbContext : AbpDbContext<TDbContext>
{
services.AddMemoryCache();

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

@ -5,6 +5,8 @@
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<WarningsAsErrors>Nullable</WarningsAsErrors>
<AssemblyName>Volo.Abp.EntityFrameworkCore</AssemblyName>
<PackageId>Volo.Abp.EntityFrameworkCore</PackageId>
<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();
[Obsolete("Use GetDbContextAsync() method.")]
DbContext IEfCoreRepository<TEntity>.DbContext => GetDbContext() as DbContext;
DbContext IEfCoreRepository<TEntity>.DbContext => (GetDbContext() as DbContext)!;
async Task<DbContext> IEfCoreRepository<TEntity>.GetDbContextAsync()
{
return await GetDbContextAsync() as DbContext;
return (await GetDbContextAsync() as DbContext)!;
}
[Obsolete("Use GetDbContextAsync() method.")]
@ -80,7 +80,7 @@ public class EfCoreRepository<TDbContext, TEntity> : RepositoryBase<TEntity>, IE
return (await GetDbContextAsync()).Database.GetDbConnection();
}
protected async Task<IDbTransaction> GetDbTransactionAsync()
protected async Task<IDbTransaction?> GetDbTransactionAsync()
{
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 IEfCoreBulkOperationProvider BulkOperationProvider => LazyServiceProvider.LazyGetService<IEfCoreBulkOperationProvider>();
public IEfCoreBulkOperationProvider? BulkOperationProvider => LazyServiceProvider.LazyGetService<IEfCoreBulkOperationProvider>();
public EfCoreRepository(IDbContextProvider<TDbContext> dbContextProvider)
{
@ -301,7 +301,7 @@ public class EfCoreRepository<TDbContext, TEntity> : RepositoryBase<TEntity>, IE
await (await GetDbContextAsync()).SaveChangesAsync(cancellationToken);
}
public async override Task<TEntity> FindAsync(
public async override Task<TEntity?> FindAsync(
Expression<Func<TEntity, bool>> predicate,
bool includeDetails = true,
CancellationToken cancellationToken = default)
@ -353,7 +353,7 @@ public class EfCoreRepository<TDbContext, TEntity> : RepositoryBase<TEntity>, IE
public virtual async Task EnsurePropertyLoadedAsync<TProperty>(
TEntity entity,
Expression<Func<TEntity, TProperty>> propertyExpression,
Expression<Func<TEntity, TProperty?>> propertyExpression,
CancellationToken cancellationToken = default)
where TProperty : class
{
@ -464,13 +464,13 @@ public class EfCoreRepository<TDbContext, TEntity, TKey> : EfCoreRepository<TDbC
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
? 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)

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
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<TDbContext> : DbContext, IAbpEfCoreDbContext,
.GetMethod(
nameof(ConfigureBaseProperties),
BindingFlags.Instance | BindingFlags.NonPublic
);
)!;
private static readonly MethodInfo ConfigureValueConverterMethodInfo
= typeof(AbpDbContext<TDbContext>)
.GetMethod(
nameof(ConfigureValueConverter),
BindingFlags.Instance | BindingFlags.NonPublic
);
)!;
private static readonly MethodInfo ConfigureValueGeneratedMethodInfo
= typeof(AbpDbContext<TDbContext>)
.GetMethod(
nameof(ConfigureValueGenerated),
BindingFlags.Instance | BindingFlags.NonPublic
);
)!;
protected AbpDbContext(DbContextOptions<TDbContext> options)
: base(options)
@ -157,7 +157,7 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext,
try
{
var auditLog = AuditingManager?.Current?.Log;
List<EntityChangeInfo> entityChangeList = null;
List<EntityChangeInfo>? entityChangeList = null;
if (auditLog != null)
{
entityChangeList = EntityHistoryHelper.CreateChangeList(ChangeTracker.Entries().ToList());
@ -174,7 +174,7 @@ public abstract class AbpDbContext<TDbContext> : 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<TDbContext> : 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<TDbContext> : 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<TDbContext> : 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<TDbContext> : DbContext, IAbpEfCoreDbContext,
}
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;
}
@ -692,10 +692,10 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext,
return false;
}
protected virtual Expression<Func<TEntity, bool>> CreateFilterExpression<TEntity>()
protected virtual Expression<Func<TEntity, bool>>? CreateFilterExpression<TEntity>()
where TEntity : class
{
Expression<Func<TEntity, bool>> expression = null;
Expression<Func<TEntity, bool>>? expression = null;
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 Action<AbpDbContextConfigurationContext> DefaultConfigureAction { get; set; }
internal Action<AbpDbContextConfigurationContext>? DefaultConfigureAction { get; set; }
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 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<TDbContext> : AbpDbContextConfigur
public AbpDbContextConfigurationContext(
string connectionString,
[NotNull] IServiceProvider serviceProvider,
[CanBeNull] string connectionStringName,
[CanBeNull] DbConnection existingConnection)
string? connectionStringName,
DbConnection? existingConnection)
: base(
connectionString,
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 Func<IQueryable<TEntity>, IQueryable<TEntity>> DefaultWithDetailsFunc { get; set; }
public Func<IQueryable<TEntity>, IQueryable<TEntity>>? DefaultWithDetailsFunc { get; set; }
}
public class AbpEntityOptions
@ -23,7 +23,7 @@ public class AbpEntityOptions
_options = new Dictionary<Type, object>();
}
public AbpEntityOptions<TEntity> GetOrNull<TEntity>()
public AbpEntityOptions<TEntity>? GetOrNull<TEntity>()
where TEntity : IEntity
{
return _options.GetOrDefault(typeof(TEntity)) as AbpEntityOptions<TEntity>;
@ -35,10 +35,10 @@ public class AbpEntityOptions
Check.NotNull(optionsAction, nameof(optionsAction));
optionsAction(
_options.GetOrAdd(
(_options.GetOrAdd(
typeof(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 static DbContextCreationContext Current => _current.Value;
public static DbContextCreationContext Current => _current.Value!;
private static readonly AsyncLocal<DbContextCreationContext> _current = new AsyncLocal<DbContextCreationContext>();
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)
{

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));
if (!preConfigureActions.IsNullOrEmpty())
{
foreach (var preConfigureAction in preConfigureActions)
foreach (var preConfigureAction in preConfigureActions!)
{
((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 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; }

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 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; }

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);
}
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);
}
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)
{
return queryable.FirstOrDefaultAsync(predicate, cancellationToken);
@ -89,12 +89,12 @@ public class EfCoreAsyncQueryableProvider : IAsyncQueryableProvider, ISingletonD
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);
}
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)
{
return queryable.LastOrDefaultAsync(predicate, cancellationToken);
@ -110,12 +110,12 @@ public class EfCoreAsyncQueryableProvider : IAsyncQueryableProvider, ISingletonD
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);
}
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)
{
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;
}
[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

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);
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;

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

@ -210,7 +210,7 @@ public abstract class EfCoreDatabaseMigrationEventHandlerBase<TDbContext> :
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<TDbContext> :
return 0;
}
return int.Parse(tryCountAsString);
return int.Parse(tryCountAsString!);
}
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;
}
}
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));

2
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);
}

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

@ -9,7 +9,7 @@ public class ExtraPropertyDictionaryValueComparer : ValueComparer<ExtraPropertyD
{
public ExtraPropertyDictionaryValueComparer()
: base(
(d1, d2) => d1.SequenceEqual(d2),
(d1, d2) => d1!.SequenceEqual(d2!),
d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())),
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 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<DateTime, DateTime>
public class AbpNullableDateTimeValueConverter : ValueConverter<DateTime?, DateTime?>
{
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)

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)
{
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)
{
@ -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 == "{}")
{
@ -66,7 +66,7 @@ public class ExtraPropertiesValueConverter : ValueConverter<ExtraPropertyDiction
{
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;
}
private static object GetNormalizedValue(
private static object? GetNormalizedValue(
Dictionary<string, object> dictionary,
ObjectExtensionPropertyInfo property)
{
@ -88,7 +88,7 @@ public class ExtraPropertiesValueConverter : ValueConverter<ExtraPropertyDiction
{
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);

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

@ -43,7 +43,7 @@ public static class EfCoreObjectExtensionPropertyInfoExtensions
[NotNull]
public static ObjectExtensionPropertyInfo MapEfCore(
[NotNull] this ObjectExtensionPropertyInfo propertyExtension,
[CanBeNull] Action<EntityTypeBuilder, PropertyBuilder> entityTypeAndPropertyBuildAction)
Action<EntityTypeBuilder, PropertyBuilder>? 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));

6
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<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(
[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;
[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.")]
public ObjectExtensionPropertyInfoEfCoreMappingOptions(
[NotNull] ObjectExtensionPropertyInfo extensionProperty,
[CanBeNull] Action<PropertyBuilder> propertyBuildAction = null,
[CanBeNull] Action<EntityTypeBuilder, PropertyBuilder> entityTypeAndPropertyBuildAction = null)
Action<PropertyBuilder>? propertyBuildAction = null,
Action<EntityTypeBuilder, PropertyBuilder>? entityTypeAndPropertyBuildAction = null)
{
ExtensionProperty = Check.NotNull(extensionProperty, nameof(extensionProperty));
@ -39,7 +37,7 @@ public class ObjectExtensionPropertyInfoEfCoreMappingOptions
public ObjectExtensionPropertyInfoEfCoreMappingOptions(
[NotNull] ObjectExtensionPropertyInfo extensionProperty,
[CanBeNull] Action<EntityTypeBuilder, PropertyBuilder> entityTypeAndPropertyBuildAction)
Action<EntityTypeBuilder, PropertyBuilder>? entityTypeAndPropertyBuildAction)
{
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 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<TMongoDbContext> : 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<TMongoDbContext> : 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<TMongoDbContext> : 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));
}

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 IAbpUnitOfWorkOptions? Options => _parent.Options;
public IAbpUnitOfWorkOptions Options => _parent.Options;
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;
IAbpUnitOfWorkOptions? Options { get; }
IAbpUnitOfWorkOptions Options { 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 IAbpUnitOfWorkOptions? Options { get; private set; }
public IAbpUnitOfWorkOptions Options { get; private set; } = default!;
public IUnitOfWork? Outer { get; private set; }

Loading…
Cancel
Save