@@ -1094,22 +1094,72 @@ await PopulateResultSetDefinitionsForStoredProcedureAsync(
10941094 }
10951095 else if ( entitySourceType is EntitySourceType . Table )
10961096 {
1097+ // Resolve PKs from fields first
1098+ List < string > ? pkFields = entity . Fields ?
1099+ . Where ( f => f . PrimaryKey )
1100+ . Select ( f => f . Name )
1101+ . ToList ( ) ;
1102+
1103+ // Fallback to key-fields from config
1104+ if ( pkFields == null || pkFields . Count == 0 )
1105+ {
1106+ pkFields = entity . Source . KeyFields ? . ToList ( ) ;
1107+ }
1108+
1109+ // If still empty, fallback to DB schema PKs
1110+ if ( pkFields == null || pkFields . Count == 0 )
1111+ {
1112+ DataTable dataTable = await GetTableWithSchemaFromDataSetAsync (
1113+ entityName ,
1114+ GetSchemaName ( entityName ) ,
1115+ GetDatabaseObjectName ( entityName ) ) ;
1116+
1117+ pkFields = dataTable . PrimaryKey . Select ( pk => pk . ColumnName ) . ToList ( ) ;
1118+ }
1119+
1120+ pkFields ??= new List < string > ( ) ;
1121+
10971122 await PopulateSourceDefinitionAsync (
10981123 entityName ,
10991124 GetSchemaName ( entityName ) ,
11001125 GetDatabaseObjectName ( entityName ) ,
11011126 GetSourceDefinition ( entityName ) ,
1102- entity . Source . KeyFields ) ;
1127+ pkFields ) ;
11031128 }
11041129 else
11051130 {
1131+ // Resolve PKs from fields first
1132+ List < string > ? pkFields = entity . Fields ?
1133+ . Where ( f => f . PrimaryKey )
1134+ . Select ( f => f . Name )
1135+ . ToList ( ) ;
1136+
1137+ // Fallback to key-fields from config
1138+ if ( pkFields == null || pkFields . Count == 0 )
1139+ {
1140+ pkFields = entity . Source . KeyFields ? . ToList ( ) ;
1141+ }
1142+
1143+ // If still empty, fallback to DB schema PKs
1144+ if ( pkFields == null || pkFields . Count == 0 )
1145+ {
1146+ DataTable dataTable = await GetTableWithSchemaFromDataSetAsync (
1147+ entityName ,
1148+ GetSchemaName ( entityName ) ,
1149+ GetDatabaseObjectName ( entityName ) ) ;
1150+
1151+ pkFields = dataTable . PrimaryKey . Select ( pk => pk . ColumnName ) . ToList ( ) ;
1152+ }
1153+
1154+ pkFields ??= [ ] ;
1155+
11061156 ViewDefinition viewDefinition = ( ViewDefinition ) GetSourceDefinition ( entityName ) ;
11071157 await PopulateSourceDefinitionAsync (
11081158 entityName ,
11091159 GetSchemaName ( entityName ) ,
11101160 GetDatabaseObjectName ( entityName ) ,
11111161 viewDefinition ,
1112- entity . Source . KeyFields ) ;
1162+ pkFields ) ;
11131163 }
11141164 }
11151165 catch ( Exception e )
@@ -1264,19 +1314,9 @@ private async Task PopulateSourceDefinitionAsync(
12641314 string schemaName ,
12651315 string tableName ,
12661316 SourceDefinition sourceDefinition ,
1267- string [ ] ? runtimeConfigKeyFields )
1317+ List < string > pkFields )
12681318 {
1269- DataTable dataTable = await GetTableWithSchemaFromDataSetAsync ( entityName , schemaName , tableName ) ;
1270-
1271- List < DataColumn > primaryKeys = new ( dataTable . PrimaryKey ) ;
1272- if ( runtimeConfigKeyFields is null || runtimeConfigKeyFields . Length == 0 )
1273- {
1274- sourceDefinition . PrimaryKey = new ( primaryKeys . Select ( primaryKey => primaryKey . ColumnName ) ) ;
1275- }
1276- else
1277- {
1278- sourceDefinition . PrimaryKey = new ( runtimeConfigKeyFields ) ;
1279- }
1319+ sourceDefinition . PrimaryKey = [ .. pkFields ] ;
12801320
12811321 if ( sourceDefinition . PrimaryKey . Count == 0 )
12821322 {
@@ -1292,6 +1332,7 @@ private async Task PopulateSourceDefinitionAsync(
12921332 await PopulateTriggerMetadataForTable ( entityName , schemaName , tableName , sourceDefinition ) ;
12931333 }
12941334
1335+ DataTable dataTable = await GetTableWithSchemaFromDataSetAsync ( entityName , schemaName , tableName ) ;
12951336 using DataTableReader reader = new ( dataTable ) ;
12961337 DataTable schemaTable = reader . GetSchemaTable ( ) ;
12971338 RuntimeConfig runtimeConfig = _runtimeConfigProvider . GetConfig ( ) ;
0 commit comments