Search code examples
c#.netdatabasepostgresqlconnection

Unable to create an object of type 'ApplicationDbContext' error


I'm trying to create the database tables using entity core frame work using dotnet ef migrations add init --verbose and dotnet ef database update but when I'm trying to update the table I'm getting an error "Unable to create an object of type 'ApplicationDbContext'. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728"

ApplicationDbContext

using System;
using System.Collections.Generic;
using Audit.Service.Domain.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;

namespace Audit.Service.Infrastructure.Repositories
{
    public class ApplicationDbContext : DbContext

    {

        public ApplicationDbContext(DbContextOptions options) : base(options) { }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseNpgsql("Server = localhost; Port = 5432; User Id = postgres; Password =; Database = AuditHistory; ");
        }

        public DbSet<AuditHistory> Audits => Set<AuditHistory>();

    }
}



I have tried like below as well. for this method also I'm getting error

program.cs

builder.Services.AddDbContext<ApplicationDbContext>(o => o.UseNpgsql(builder.Configuration.GetConnectionString("auditDb"), options => options.EnableRetryOnFailure())) 

ApplicationDbcontext

public class ApplicationDbContext : DbContext
{
    protected readonly IConfiguration Configuration;
    public ApplicationDbContext()
    {

    }

    public ApplicationDbContext(IConfiguration configuration)
    {
        Configuration = configuration;

    }
    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        options.UseNpgsql(Configuration.GetConnectionString("auditDb"));
    }
    public DbSet<AuditHistory> Audits { get; set; }
}
}

appsettings.json

{
 "Logging": {
"LogLevel": {
  "Default": "Information",
  "Microsoft.AspNetCore": "Warning"
  }
 },
 "AllowedHosts": "*",
 "ConnectionStrings": {
    "auditDb":"Server=localhost;Port=5432;User Id=postgres;Password=;Database=AuditHistory;"

 }
 }

Error

    System.ArgumentException: Host can't be null
     at Npgsql.NpgsqlConnectionStringBuilder.PostProcessAndValidate()
   at Npgsql.NpgsqlConnection.SetupDataSource()
   at Npgsql.NpgsqlConnection.set_ConnectionString(String value)
   at Npgsql.NpgsqlConnection..ctor(String connectionString)
   at Npgsql.NpgsqlConnection.CloneWith(String connectionString)
   at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlRelationalConnection.CloneWith(String connectionString)
   at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists(Boolean async, CancellationToken cancellationToken)
   at Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.NpgsqlDatabaseCreator.Exists()
   at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
   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)
Host can't be null

Solution

  • My The Entity Framework tools version is '7.0.2' is older than that of the runtime '7.0.3'. I Updated the tools for the latest. Then it got fixed