2121using System . Data . Common ;
2222using System . Linq ;
2323using FirebirdSql . Data . FirebirdClient ;
24+ using FirebirdSql . Data . Services ;
2425using Microsoft . EntityFrameworkCore . Metadata ;
2526using Microsoft . EntityFrameworkCore . Migrations ;
2627using Microsoft . EntityFrameworkCore . Scaffolding ;
@@ -31,6 +32,8 @@ namespace FirebirdSql.EntityFrameworkCore.Firebird.Scaffolding.Internal
3132{
3233 public class FbDatabaseModelFactory : DatabaseModelFactory
3334 {
35+ public int MajorVersionNumber { get ; private set ; }
36+
3437 public override DatabaseModel Create ( string connectionString , DatabaseModelFactoryOptions options )
3538 {
3639 using ( var connection = new FbConnection ( connectionString ) )
@@ -49,6 +52,9 @@ public override DatabaseModel Create(DbConnection connection, DatabaseModelFacto
4952 connection . Open ( ) ;
5053 }
5154
55+ var serverVersion = FbServerProperties . ParseServerVersion ( connection . ServerVersion ) ;
56+ MajorVersionNumber = serverVersion . Major ;
57+
5258 try
5359 {
5460 databaseModel . DatabaseName = connection . Database ;
@@ -76,15 +82,14 @@ public override DatabaseModel Create(DbConnection connection, DatabaseModelFacto
7682 }
7783 }
7884
79-
8085 private string GetDefaultSchema ( DbConnection connection )
8186 {
8287 return null ;
8388 }
8489
8590 private static Func < string , string , bool > GenerateTableFilter ( IReadOnlyList < string > tables , IReadOnlyList < string > schemas )
8691 {
87- return tables . Any ( ) ? ( s , t ) => tables . Contains ( t ) : ( Func < string , string , bool > ) null ;
92+ return tables . Any ( ) ? ( s , t ) => tables . Contains ( t ) : null ;
8893 }
8994
9095 private const string GetTablesQuery =
@@ -178,7 +183,7 @@ ELSE F.RDB$FIELD_SUB_TYPE
178183 ELSE 'RDB$FIELD_TYPE: ' || F.RDB$FIELD_TYPE || '?'
179184 END as STORE_TYPE,
180185 F.rdb$description as COLUMN_COMMENT,
181- COALESCE(RF.RDB$IDENTITY_TYPE , 0) as AUTO_GENERATED,
186+ COALESCE({1} , 0) as AUTO_GENERATED,
182187 ch.RDB$CHARACTER_SET_NAME as CHARACTER_SET_NAME
183188 FROM
184189 RDB$RELATION_FIELDS RF
@@ -192,11 +197,13 @@ ORDER BY
192197
193198 private void GetColumns ( DbConnection connection , IReadOnlyList < DatabaseTable > tables , Func < string , string , bool > tableFilter )
194199 {
200+ var identityType = MajorVersionNumber < 3 ? "null" : "rf.RDB$IDENTITY_TYPE" ;
201+
195202 foreach ( var table in tables )
196203 {
197204 using ( var command = connection . CreateCommand ( ) )
198205 {
199- command . CommandText = string . Format ( GetColumnsQuery , table . Name ) ;
206+ command . CommandText = string . Format ( GetColumnsQuery , table . Name , identityType ) ;
200207 using ( var reader = command . ExecuteReader ( ) )
201208 {
202209 while ( reader . Read ( ) )
@@ -393,7 +400,7 @@ private void GetConstraints(DbConnection connection, IReadOnlyList<DatabaseTable
393400
394401 private static ReferentialAction ? ConvertToReferentialAction ( string onDeleteAction )
395402 {
396- return ( onDeleteAction . ToUpperInvariant ( ) ) switch
403+ return onDeleteAction . ToUpperInvariant ( ) switch
397404 {
398405 "RESTRICT" => ReferentialAction . Restrict ,
399406 "CASCADE" => ReferentialAction . Cascade ,
0 commit comments