-2

I am using .NET Core 7 and I want to use EF Core to access a Sqlite (*.db3) database file. This file has a password and I want to add the database tables to the project through database first. The scaffold-dbcontext code is as follows, but it gives an error and does not bring the tables. What is the problem?

In general, SQlite database tables can be added to the project through DatabaseFirst, or they should be added only through CodeFirst, because everywhere I searched, Sqlite databases are created only through CodeFirst.

I want to use database first method.

Scaffold-DbContext "DataSource=Path\db.db3;Password=***" Microsoft.EntityFrameworkCore.Sqlite -Project "Databases" -Force -ContextDir "[Dir]\Context" -OutputDir "[Dir]" -UseDatabaseNames

Libraries that I have added in the project:

Microsoft.EntityFrameworkCore.Sqlite,Microsoft.EntityFrameworkCore.Tools,SQLitePCLRaw.bundle_e_sqlcipher,Microsoft.EntityFrameworkCore.Sqlite.Design

This database file is read from SqliteStudio and displays the tables:

enter image description here

enter image description here

Error Text:

To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see http://go.microsoft.com/fwlink/?LinkId=723263. Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 26: 'file is not a database'. at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db) at Microsoft.Data.Sqlite.SqliteConnectionInternal.RetryWhileBusy(Func1 action, Action reset, Int32 timeout, Stopwatch timer) at Microsoft.Data.Sqlite.SqliteConnectionInternal.RetryWhileBusy(Func1 action, Int32 timeout, Stopwatch timer) at Microsoft.Data.Sqlite.SqliteConnectionInternal.ExecuteNonQuery(String sql, Int32 timeout) at Microsoft.Data.Sqlite.SqliteConnectionInternal..ctor(SqliteConnectionStringBuilder connectionOptions, SqliteConnectionPool pool) at Microsoft.Data.Sqlite.SqliteConnectionPool.GetConnection() at Microsoft.Data.Sqlite.SqliteConnectionFactory.GetConnection(SqliteConnection outerConnection) at Microsoft.Data.Sqlite.SqliteConnection.Open() at Microsoft.EntityFrameworkCore.Sqlite.Scaffolding.Internal.SqliteDatabaseModelFactory.Create(DbConnection connection, DatabaseModelFactoryOptions options) at Microsoft.EntityFrameworkCore.Sqlite.Scaffolding.Internal.SqliteDatabaseModelFactory.Create(String connectionString, DatabaseModelFactoryOptions options) at Microsoft.EntityFrameworkCore.Scaffolding.Internal.ReverseEngineerScaffolder.ScaffoldModel(String connectionString, DatabaseModelFactoryOptions databaseOptions, ModelReverseEngineerOptions modelOptions, ModelCodeGenerationOptions codeOptions) at Microsoft.EntityFrameworkCore.Design.Internal.DatabaseOperations.ScaffoldContext(String provider, String connectionString, String outputDir, String outputContextDir, String dbContextClassName, IEnumerable1 schemas, IEnumerable1 tables, String modelNamespace, String contextNamespace, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames, Boolean suppressOnConfiguring, Boolean noPluralize) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContextImpl(String provider, String connectionString, String outputDir, String outputDbContextDir, String dbContextClassName, IEnumerable1 schemaFilters, IEnumerable1 tableFilters, String modelNamespace, String contextNamespace, Boolean useDataAnnotations, Boolean overwriteFiles, Boolean useDatabaseNames, Boolean suppressOnConfiguring, Boolean noPluralize) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScaffoldContext.<>c__DisplayClass0_0.<.ctor>b__0() at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.b__0() at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action) SQLite Error 26: 'file is not a database'.

0 Answers0