@@ -208,22 +208,21 @@ public static int ExecuteSqlCommand(
208208 Check . NotNull ( sql , nameof ( sql ) ) ;
209209 Check . NotNull ( parameters , nameof ( parameters ) ) ;
210210
211- var concurrencyDetector = databaseFacade . GetService < IConcurrencyDetector > ( ) ;
212- var logger = databaseFacade . GetService < IDiagnosticsLogger < DbLoggerCategory . Database . Command > > ( ) ;
211+ var concurrencyDetector = GetFacadeDependencies ( databaseFacade ) . ConcurrencyDetector ;
212+ var logger = GetFacadeDependencies ( databaseFacade ) . CommandLogger ;
213213
214214 using ( concurrencyDetector . EnterCriticalSection ( ) )
215215 {
216- var rawSqlCommand = databaseFacade
217- . GetRelationalService < IRawSqlCommandBuilder > ( )
216+ var rawSqlCommand = GetFacadeDependencies ( databaseFacade ) . RawSqlCommandBuilder
218217 . Build ( sql . Format , parameters ) ;
219218
220219 return rawSqlCommand
221220 . RelationalCommand
222221 . ExecuteNonQuery (
223222 new RelationalCommandParameterObject (
224- databaseFacade . GetRelationalService < IRelationalConnection > ( ) ,
223+ GetFacadeDependencies ( databaseFacade ) . RelationalConnection ,
225224 rawSqlCommand . ParameterValues ,
226- databaseFacade . GetService < ICurrentDbContext > ( ) . Context ,
225+ ( ( IDatabaseFacadeDependenciesAccessor ) databaseFacade ) . Context ,
227226 logger ) ) ;
228227 }
229228 }
@@ -374,22 +373,22 @@ public static async Task<int> ExecuteSqlCommandAsync(
374373 Check . NotNull ( sql , nameof ( sql ) ) ;
375374 Check . NotNull ( parameters , nameof ( parameters ) ) ;
376375
377- var concurrencyDetector = databaseFacade . GetService < IConcurrencyDetector > ( ) ;
378- var logger = databaseFacade . GetService < IDiagnosticsLogger < DbLoggerCategory . Database . Command > > ( ) ;
376+ var facadeDependencies = GetFacadeDependencies ( databaseFacade ) ;
377+ var concurrencyDetector = facadeDependencies . ConcurrencyDetector ;
378+ var logger = facadeDependencies . CommandLogger ;
379379
380380 using ( await concurrencyDetector . EnterCriticalSectionAsync ( cancellationToken ) )
381381 {
382- var rawSqlCommand = databaseFacade
383- . GetRelationalService < IRawSqlCommandBuilder > ( )
382+ var rawSqlCommand = GetFacadeDependencies ( databaseFacade ) . RawSqlCommandBuilder
384383 . Build ( sql . Format , parameters ) ;
385384
386385 return await rawSqlCommand
387386 . RelationalCommand
388387 . ExecuteNonQueryAsync (
389388 new RelationalCommandParameterObject (
390- databaseFacade . GetRelationalService < IRelationalConnection > ( ) ,
389+ facadeDependencies . RelationalConnection ,
391390 rawSqlCommand . ParameterValues ,
392- databaseFacade . GetService < ICurrentDbContext > ( ) . Context ,
391+ ( ( IDatabaseFacadeDependenciesAccessor ) databaseFacade ) . Context ,
393392 logger ) ,
394393 cancellationToken ) ;
395394 }
@@ -490,22 +489,22 @@ public static int ExecuteSqlRaw(
490489 Check . NotNull ( sql , nameof ( sql ) ) ;
491490 Check . NotNull ( parameters , nameof ( parameters ) ) ;
492491
493- var concurrencyDetector = databaseFacade . GetService < IConcurrencyDetector > ( ) ;
494- var logger = databaseFacade . GetService < IDiagnosticsLogger < DbLoggerCategory . Database . Command > > ( ) ;
492+ var facadeDependencies = GetFacadeDependencies ( databaseFacade ) ;
493+ var concurrencyDetector = facadeDependencies . ConcurrencyDetector ;
494+ var logger = facadeDependencies . CommandLogger ;
495495
496496 using ( concurrencyDetector . EnterCriticalSection ( ) )
497497 {
498- var rawSqlCommand = databaseFacade
499- . GetRelationalService < IRawSqlCommandBuilder > ( )
498+ var rawSqlCommand = GetFacadeDependencies ( databaseFacade ) . RawSqlCommandBuilder
500499 . Build ( sql , parameters ) ;
501500
502501 return rawSqlCommand
503502 . RelationalCommand
504503 . ExecuteNonQuery (
505504 new RelationalCommandParameterObject (
506- databaseFacade . GetRelationalService < IRelationalConnection > ( ) ,
505+ facadeDependencies . RelationalConnection ,
507506 rawSqlCommand . ParameterValues ,
508- databaseFacade . GetService < ICurrentDbContext > ( ) . Context ,
507+ ( ( IDatabaseFacadeDependenciesAccessor ) databaseFacade ) . Context ,
509508 logger ) ) ;
510509 }
511510 }
@@ -642,22 +641,22 @@ public static async Task<int> ExecuteSqlRawAsync(
642641 Check . NotNull ( sql , nameof ( sql ) ) ;
643642 Check . NotNull ( parameters , nameof ( parameters ) ) ;
644643
645- var concurrencyDetector = databaseFacade . GetService < IConcurrencyDetector > ( ) ;
646- var logger = databaseFacade . GetService < IDiagnosticsLogger < DbLoggerCategory . Database . Command > > ( ) ;
644+ var facadeDependencies = GetFacadeDependencies ( databaseFacade ) ;
645+ var concurrencyDetector = facadeDependencies . ConcurrencyDetector ;
646+ var logger = facadeDependencies . CommandLogger ;
647647
648648 using ( await concurrencyDetector . EnterCriticalSectionAsync ( cancellationToken ) )
649649 {
650- var rawSqlCommand = databaseFacade
651- . GetRelationalService < IRawSqlCommandBuilder > ( )
650+ var rawSqlCommand = GetFacadeDependencies ( databaseFacade ) . RawSqlCommandBuilder
652651 . Build ( sql , parameters ) ;
653652
654653 return await rawSqlCommand
655654 . RelationalCommand
656655 . ExecuteNonQueryAsync (
657656 new RelationalCommandParameterObject (
658- databaseFacade . GetRelationalService < IRelationalConnection > ( ) ,
657+ facadeDependencies . RelationalConnection ,
659658 rawSqlCommand . ParameterValues ,
660- databaseFacade . GetService < ICurrentDbContext > ( ) . Context ,
659+ ( ( IDatabaseFacadeDependenciesAccessor ) databaseFacade ) . Context ,
661660 logger ) ,
662661 cancellationToken ) ;
663662 }
@@ -669,7 +668,7 @@ public static async Task<int> ExecuteSqlRawAsync(
669668 /// <param name="databaseFacade"> The <see cref="DatabaseFacade" /> for the context. </param>
670669 /// <returns> The <see cref="DbConnection" /> </returns>
671670 public static DbConnection GetDbConnection ( [ NotNull ] this DatabaseFacade databaseFacade )
672- => databaseFacade . GetRelationalService < IRelationalConnection > ( ) . DbConnection ;
671+ => GetFacadeDependencies ( databaseFacade ) . RelationalConnection . DbConnection ;
673672
674673 /// <summary>
675674 /// Opens the underlying <see cref="DbConnection" />.
@@ -678,7 +677,7 @@ public static DbConnection GetDbConnection([NotNull] this DatabaseFacade databas
678677 public static void OpenConnection ( [ NotNull ] this DatabaseFacade databaseFacade )
679678 => databaseFacade . CreateExecutionStrategy ( ) . Execute (
680679 databaseFacade , database
681- => database . GetRelationalService < IRelationalConnection > ( ) . Open ( ) ) ;
680+ => GetFacadeDependencies ( database ) . RelationalConnection . Open ( ) ) ;
682681
683682 /// <summary>
684683 /// Opens the underlying <see cref="DbConnection" />.
@@ -693,14 +692,14 @@ public static Task OpenConnectionAsync(
693692 CancellationToken cancellationToken = default )
694693 => databaseFacade . CreateExecutionStrategy ( ) . ExecuteAsync (
695694 databaseFacade , ( database , ct ) =>
696- database . GetRelationalService < IRelationalConnection > ( ) . OpenAsync ( cancellationToken ) , cancellationToken ) ;
695+ GetFacadeDependencies ( database ) . RelationalConnection . OpenAsync ( cancellationToken ) , cancellationToken ) ;
697696
698697 /// <summary>
699698 /// Closes the underlying <see cref="DbConnection" />.
700699 /// </summary>
701700 /// <param name="databaseFacade"> The <see cref="DatabaseFacade" /> for the context. </param>
702701 public static void CloseConnection ( [ NotNull ] this DatabaseFacade databaseFacade )
703- => databaseFacade . GetRelationalService < IRelationalConnection > ( ) . Close ( ) ;
702+ => GetFacadeDependencies ( databaseFacade ) . RelationalConnection . Close ( ) ;
704703
705704 /// <summary>
706705 /// Starts a new transaction with a given <see cref="IsolationLevel" />.
@@ -774,7 +773,7 @@ public static IDbContextTransaction UseTransaction(
774773 /// <param name="databaseFacade"> The <see cref="DatabaseFacade" /> for the context. </param>
775774 /// <param name="timeout"> The timeout to use, in seconds. </param>
776775 public static void SetCommandTimeout ( [ NotNull ] this DatabaseFacade databaseFacade , int ? timeout )
777- => databaseFacade . GetRelationalService < IRelationalConnection > ( ) . CommandTimeout = timeout ;
776+ => GetFacadeDependencies ( databaseFacade ) . RelationalConnection . CommandTimeout = timeout ;
778777
779778 /// <summary>
780779 /// <para>
@@ -814,7 +813,7 @@ public static void SetCommandTimeout([NotNull] this DatabaseFacade databaseFacad
814813 /// <param name="databaseFacade"> The <see cref="DatabaseFacade" /> for the context. </param>
815814 /// <returns> The timeout, in seconds, or null if no timeout has been set. </returns>
816815 public static int ? GetCommandTimeout ( [ NotNull ] this DatabaseFacade databaseFacade )
817- => databaseFacade . GetRelationalService < IRelationalConnection > ( ) . CommandTimeout ;
816+ => GetFacadeDependencies ( databaseFacade ) . RelationalConnection . CommandTimeout ;
818817
819818 /// <summary>
820819 /// Generates a script to create all tables for the current model.
@@ -825,6 +824,18 @@ public static void SetCommandTimeout([NotNull] this DatabaseFacade databaseFacad
825824 public static string GenerateCreateScript ( [ NotNull ] this DatabaseFacade databaseFacade )
826825 => databaseFacade . GetRelationalService < IRelationalDatabaseCreator > ( ) . GenerateCreateScript ( ) ;
827826
827+ private static IRelationalDatabaseFacadeDependencies GetFacadeDependencies ( DatabaseFacade databaseFacade )
828+ {
829+ var dependencies = ( ( IDatabaseFacadeDependenciesAccessor ) databaseFacade ) . Dependencies ;
830+
831+ if ( dependencies is IRelationalDatabaseFacadeDependencies relationalDependencies )
832+ {
833+ return relationalDependencies ;
834+ }
835+
836+ throw new InvalidOperationException ( RelationalStrings . RelationalNotInUse ) ;
837+ }
838+
828839 private static TService GetRelationalService < TService > ( this IInfrastructure < IServiceProvider > databaseFacade )
829840 {
830841 Check . NotNull ( databaseFacade , nameof ( databaseFacade ) ) ;
@@ -839,6 +850,6 @@ private static TService GetRelationalService<TService>(this IInfrastructure<ISer
839850 }
840851
841852 private static IDbContextTransactionManager GetTransactionManager ( [ NotNull ] this DatabaseFacade databaseFacade )
842- => Check . NotNull ( databaseFacade , nameof ( databaseFacade ) ) . GetService < IDbContextTransactionManager > ( ) ;
853+ => ( ( IDatabaseFacadeDependenciesAccessor ) Check . NotNull ( databaseFacade , nameof ( databaseFacade ) ) ) . Dependencies . TransactionManager ;
843854 }
844855}
0 commit comments