@@ -67,7 +67,22 @@ private IModel CreateModel(bool designTime)
6767 _inOnModelCreating = true ;
6868
6969 var dependencies = _scopedProvider ! . GetRequiredService < ModelCreationDependencies > ( ) ;
70- var modelFromOptions = CoreOptions ? . Model ?? FindCompiledModel ( _currentContext ! . Context . GetType ( ) ) ;
70+
71+ string ? mismatchedProviderName = null ;
72+ var modelFromOptions = CoreOptions ? . Model ;
73+ if ( modelFromOptions == null )
74+ {
75+ var providers = _scopedProvider ! . GetService < IEnumerable < IDatabaseProvider > > ( ) ? . ToList ( ) ;
76+ var providerName = providers is [ var provider ] ? provider . Name : null ;
77+
78+ modelFromOptions = FindCompiledModel ( _currentContext ! . Context . GetType ( ) , providerName , out mismatchedProviderName ) ;
79+
80+ if ( mismatchedProviderName != null )
81+ {
82+ var logger = _scopedProvider ! . GetRequiredService < IDiagnosticsLogger < DbLoggerCategory . Infrastructure > > ( ) ;
83+ logger . CompiledModelProviderMismatchWarning ( mismatchedProviderName , providerName ! ) ;
84+ }
85+ }
7186
7287 var modelVersion = modelFromOptions ? . GetProductVersion ( ) ;
7388 if ( modelVersion != null )
@@ -105,17 +120,27 @@ private IModel CreateModel(bool designTime)
105120 _inOnModelCreating = false ;
106121 }
107122
108- static IModel ? FindCompiledModel ( Type contextType )
123+ static IModel ? FindCompiledModel ( Type contextType , string ? providerName , out string ? mismatchedProviderName )
109124 {
125+ mismatchedProviderName = null ;
110126 var contextAssembly = contextType . Assembly ;
111127 IModel ? model = null ;
128+ string ? firstMismatchedProvider = null ;
112129 foreach ( var modelAttribute in contextAssembly . GetCustomAttributes < DbContextModelAttribute > ( ) )
113130 {
114131 if ( modelAttribute . ContextType != contextType )
115132 {
116133 continue ;
117134 }
118135
136+ if ( modelAttribute . ProviderName != null
137+ && providerName != null
138+ && modelAttribute . ProviderName != providerName )
139+ {
140+ firstMismatchedProvider ??= modelAttribute . ProviderName ;
141+ continue ;
142+ }
143+
119144 var modelType = modelAttribute . ModelType ;
120145
121146 var instanceProperty = modelType . GetProperty ( "Instance" , BindingFlags . Public | BindingFlags . Static ) ;
@@ -135,6 +160,11 @@ private IModel CreateModel(bool designTime)
135160 model = ( IModel ) instanceProperty . GetValue ( null ) ! ;
136161 }
137162
163+ if ( model == null )
164+ {
165+ mismatchedProviderName = firstMismatchedProvider ;
166+ }
167+
138168 return model ;
139169 }
140170 }
0 commit comments