Я пытаюсь создать таблицы базы данных, используя базовую структуру сущностей, используя dotnet ef миграции добавить init --verbose и обновление базы данных dotnet ef но когда я пытаюсь обновить таблицу, я получаю сообщение об ошибке «Невозможно создать объект типа« ApplicationDbContext ». Различные шаблоны, поддерживаемые во время разработки, см. 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>();
}
}
Я пробовал, как показано ниже. для этого метода также я получаю сообщение об ошибке
программа.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;"
}
}
Ошибка
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
@DavidG попытался с миграцией cmd dotnet ef добавить init --verbose и обновление базы данных dotnet ef
Вы используете Entity, где есть сопоставление между классами С# и таблицами/полями базы данных. Вам нужно обновить картографию. Вы не можете просто добавить таблицу в базу данных без обновления отображения. Правильнее всего использовать Migration Update, который изменяет сопоставление. Migration Update берет классы С# и обновляет сопоставление и базу данных, чтобы они соответствовали классам.
У вас есть несколько проектов в вашем решении? Кроме того, пожалуйста, игнорируйте jdweng, они понятия не имеют, о чем говорят.
@jdweng Я могу создавать моментальные снимки миграции, но таблица не создается в базе данных.
@DavidG нет, у меня есть только этот проект. Я следую архитектуре, управляемой доменом. Все проекты связаны только с одним и тем же.
Я заметил здесь одну вещь, хотя не уверен, что проблема в этом: вы используете GetConnectionString("AuditHistory")
, но строка подключения в ваших настройках на самом деле называется auditDb
@DavidG извините, нет, это не проблема, я неправильно ввел это здесь.
Либо вы получаете незарегистрированное исключение, либо строка подключения неверна, и вы обновляете другую базу данных.
Моя версия инструментов Entity Framework «7.0.2» старше, чем версия среды выполнения «7.0.3». Я обновил инструменты до последней версии. Потом это исправили
Как вы пытались создать таблицы?