Click here to Skip to main content
15,794,275 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I learnt that we need to add a new Database Migration to an asp project using the command.
dotnet ef migrations add ClientMigrations

The command works and a class file is generated in the Migrations folder.
However when I try to run the command
in the PM CONSOLE then the Table creation command fails with this message
      Applying migration '20230623163254_InitialCreate'.
Applying migration '20230623163254_InitialCreate'.
      Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      CREATE TABLE "ClientMessages" (
          "Name" TEXT NOT NULL,
          "Message" TEXT NOT NULL,
          "Time" TEXT NOT NULL
fail: Microsoft.EntityFrameworkCore.Database.Command[20102]
      Failed executing DbCommand (2ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion")
      VALUES ('20230623163254_InitialCreate', '7.0.7');
Failed executing DbCommand (2ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion")
VALUES ('20230623163254_InitialCreate', '7.0.7');
Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: 'no such table: __EFMigrationsHistory'.
   at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db)
   at Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements(Stopwatch timer)+MoveNext()
   at Microsoft.Data.Sqlite.SqliteCommand.GetStatements(Stopwatch timer)+MoveNext()
   at Microsoft.Data.Sqlite.SqliteDataReader.NextResult()
   at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior)
   at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader()
   at Microsoft.Data.Sqlite.SqliteCommand.ExecuteNonQuery()
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQuery(RelationalCommandParameterObject parameterObject)
   at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String connectionString, String contextType)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
SQLite Error 1: 'no such table: __EFMigrationsHistory'.

Check the section below for the implementation details of my database context class and model.

What I have tried:

using Microsoft.EntityFrameworkCore;
namespace ASPLearner.Models
    public class DbCtx : DbContext
       public DbSet<ClientMessage> ClientMessages { get; set; }    

        //declare the constructor and invoke the super
        public DbCtx(DbContextOptions<DbCtx> options) : base(options) { 
        //override the onmodelcreating and specify the table details
        protected override void OnModelCreating(ModelBuilder modelBuilder)
            //map the model to a table

namespace ASPLearner.Models
    public class ClientMessage
        //the message needs a primary key mapper
        public int Id { get; set; } 
        //define the name and query of the client as properties
        public string Name { get; set; }
        public string Message { get; set; }
        //the date time when the request was made
        public DateTime Time { get; set; }  

Code generated in the migration file
<pre>using System;
using Microsoft.EntityFrameworkCore.Migrations;

#nullable disable

namespace ASPLearner.Migrations
    /// <inheritdoc />
    public partial class ClientMigrations : Migration
        /// <inheritdoc />
        protected override void Up(MigrationBuilder migrationBuilder)
                name: "ClientMessages",
                columns: table => new
                    Id = table.Column<int>(type: "INTEGER", nullable: false)
                        .Annotation("Sqlite:Autoincrement", true),
                    Name = table.Column<string>(type: "TEXT", nullable: false),
                    Message = table.Column<string>(type: "TEXT", nullable: false),
                    Time = table.Column<DateTime>(type: "TEXT", nullable: false)
                constraints: table =>
                    table.PrimaryKey("PK_ClientMessages", x => x.Id);

        /// <inheritdoc />
        protected override void Down(MigrationBuilder migrationBuilder)
                name: "ClientMessages");

Help me get rid of that error so that my program creates the table in the database, Thanks
Updated 23-Jun-23 8:27am
Dave Kreskowiak 23-Jun-23 12:39pm    
That's not the entire error message. That's just telling you the statement to add the migration data to the __EFMigrationsHistory table in the database failed. We need the complete error message, everything after the line you posted.
Tim the Gamer 23-Jun-23 12:42pm    
Updating the post with the full error message
Tim the Gamer 23-Jun-23 12:44pm    
post updated.
Dave Kreskowiak 23-Jun-23 13:03pm    
Delete the database from the server and run the UPDATE DATABASE command again.

It's telling you the database existed already, but it does not have the __EFMigrationsHistory table in it. This tells me you created the database by hand, or through some other process, and then tried to run your migration against it.
Tim the Gamer 23-Jun-23 13:05pm    
Okay deleting the database right way, will update you if it works.

1 solution

I fixed it by telling the sqlite where to write the database file by providing the Connection string in my json to look like below
  "ConnectionStrings": {
    "DefaultConnection": "Data Source=database.db"
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
  "AllowedHosts": "*"

and then added a new database context in the Startup.cs file like
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
//get the configuration properties
var cfg = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", optional: true)
//add sql lite database context to the project
builder.Services.AddDbContext<DbCtx>(options =>

Share this answer

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900