21
21
using System . Data . Common ;
22
22
using System . Linq ;
23
23
using FirebirdSql . Data . FirebirdClient ;
24
+ using FirebirdSql . Data . Services ;
24
25
using Microsoft . EntityFrameworkCore . Metadata ;
25
26
using Microsoft . EntityFrameworkCore . Migrations ;
26
27
using Microsoft . EntityFrameworkCore . Scaffolding ;
@@ -31,6 +32,8 @@ namespace FirebirdSql.EntityFrameworkCore.Firebird.Scaffolding.Internal
31
32
{
32
33
public class FbDatabaseModelFactory : DatabaseModelFactory
33
34
{
35
+ public int MajorVersionNumber { get ; private set ; }
36
+
34
37
public override DatabaseModel Create ( string connectionString , DatabaseModelFactoryOptions options )
35
38
{
36
39
using ( var connection = new FbConnection ( connectionString ) )
@@ -49,6 +52,9 @@ public override DatabaseModel Create(DbConnection connection, DatabaseModelFacto
49
52
connection . Open ( ) ;
50
53
}
51
54
55
+ var serverVersion = FbServerProperties . ParseServerVersion ( connection . ServerVersion ) ;
56
+ MajorVersionNumber = serverVersion . Major ;
57
+
52
58
try
53
59
{
54
60
databaseModel . DatabaseName = connection . Database ;
@@ -76,15 +82,14 @@ public override DatabaseModel Create(DbConnection connection, DatabaseModelFacto
76
82
}
77
83
}
78
84
79
-
80
85
private string GetDefaultSchema ( DbConnection connection )
81
86
{
82
87
return null ;
83
88
}
84
89
85
90
private static Func < string , string , bool > GenerateTableFilter ( IReadOnlyList < string > tables , IReadOnlyList < string > schemas )
86
91
{
87
- return tables . Any ( ) ? ( s , t ) => tables . Contains ( t ) : ( Func < string , string , bool > ) null ;
92
+ return tables . Any ( ) ? ( s , t ) => tables . Contains ( t ) : null ;
88
93
}
89
94
90
95
private const string GetTablesQuery =
@@ -178,7 +183,7 @@ ELSE F.RDB$FIELD_SUB_TYPE
178
183
ELSE 'RDB$FIELD_TYPE: ' || F.RDB$FIELD_TYPE || '?'
179
184
END as STORE_TYPE,
180
185
F.rdb$description as COLUMN_COMMENT,
181
- COALESCE(RF.RDB$IDENTITY_TYPE , 0) as AUTO_GENERATED,
186
+ COALESCE({1} , 0) as AUTO_GENERATED,
182
187
ch.RDB$CHARACTER_SET_NAME as CHARACTER_SET_NAME
183
188
FROM
184
189
RDB$RELATION_FIELDS RF
@@ -192,11 +197,13 @@ ORDER BY
192
197
193
198
private void GetColumns ( DbConnection connection , IReadOnlyList < DatabaseTable > tables , Func < string , string , bool > tableFilter )
194
199
{
200
+ var identityType = MajorVersionNumber < 3 ? "null" : "rf.RDB$IDENTITY_TYPE" ;
201
+
195
202
foreach ( var table in tables )
196
203
{
197
204
using ( var command = connection . CreateCommand ( ) )
198
205
{
199
- command . CommandText = string . Format ( GetColumnsQuery , table . Name ) ;
206
+ command . CommandText = string . Format ( GetColumnsQuery , table . Name , identityType ) ;
200
207
using ( var reader = command . ExecuteReader ( ) )
201
208
{
202
209
while ( reader . Read ( ) )
@@ -393,7 +400,7 @@ private void GetConstraints(DbConnection connection, IReadOnlyList<DatabaseTable
393
400
394
401
private static ReferentialAction ? ConvertToReferentialAction ( string onDeleteAction )
395
402
{
396
- return ( onDeleteAction . ToUpperInvariant ( ) ) switch
403
+ return onDeleteAction . ToUpperInvariant ( ) switch
397
404
{
398
405
"RESTRICT" => ReferentialAction . Restrict ,
399
406
"CASCADE" => ReferentialAction . Cascade ,
0 commit comments