/// <summary> /// Returns a hash code created from any options that would cause a new <see cref="IServiceProvider" /> /// to be needed. /// </summary> /// <returns> A hash over options that require a new service provider when changed. </returns> public virtual long GetServiceProviderHashCode() { if (_serviceProviderHash == null) { var hashCode = GetLoggerFactory()?.GetHashCode() ?? 0L; hashCode = (hashCode * 397) ^ (GetMemoryCache()?.GetHashCode() ?? 0L); hashCode = (hashCode * 3) ^ _sensitiveDataLoggingEnabled.GetHashCode(); hashCode = (hashCode * 3) ^ _detailedErrorsEnabled.GetHashCode(); hashCode = (hashCode * 1073742113) ^ _warningsConfiguration.GetServiceProviderHashCode(); if (_replacedServices != null) { hashCode = _replacedServices.Aggregate(hashCode, (t, e) => (t * 397) ^ e.Value.GetHashCode()); } _serviceProviderHash = hashCode; } return(_serviceProviderHash.Value); }
/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> public virtual void Validate(IDbContextOptions options) { var coreOptions = options.FindExtension <CoreOptionsExtension>() ?? new CoreOptionsExtension(); if (IsSensitiveDataLoggingEnabled != coreOptions.IsSensitiveDataLoggingEnabled) { Check.DebugAssert(coreOptions.InternalServiceProvider != null, "InternalServiceProvider is null"); throw new InvalidOperationException( CoreStrings.SingletonOptionChanged( nameof(DbContextOptionsBuilder.EnableSensitiveDataLogging), nameof(DbContextOptionsBuilder.UseInternalServiceProvider))); } if (WarningsConfiguration?.GetServiceProviderHashCode() != coreOptions.WarningsConfiguration?.GetServiceProviderHashCode()) { Check.DebugAssert(coreOptions.InternalServiceProvider != null, "InternalServiceProvider is null"); throw new InvalidOperationException( CoreStrings.SingletonOptionChanged( nameof(DbContextOptionsBuilder.ConfigureWarnings), nameof(DbContextOptionsBuilder.UseInternalServiceProvider))); } }