#c# #asp.net #.net #entity-framework #.net-core
#c# #asp.net #.net #entity-framework #.net-core
Вопрос:
Я пытаюсь настроить серверную часть dotnet с отдельными проектами, у меня есть проект API (который является webapi) в качестве основного проекта, затем у меня есть проект persistence, который содержит класс DataContext.
DataContext.cs:
using Domain;
using Microsoft.EntityFrameworkCore;
namespace Persistence
{
public class DataContext : DbContext
{
public DataContext(DbContextOptions options) : base(options)
{
}
public DbSet<Book> Books { get; set; }
}
}
И я внедряю DataContext в службы конфигурации в файле запуска:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<DataContext>(opt =>
{
opt.UseSqlite(Configuration.GetConnectionString("DefaultConnection"));
});
services.AddControllers();
}
затем, когда я пытаюсь добавить миграцию с помощью этой команды:
dotnet ef migrations add InitialCreate -s API -p Persistence
Это выдает мне эту ошибку.
Пожалуйста, есть идеи, почему это происходит?
Комментарии:
1. Есть ли еще какая-либо информация об ошибке, кроме «Я не могу создать объект»?
2. @gunr2171 это полная ошибка: не удалось создать объект типа ‘DataContext’. Для различных шаблонов, поддерживаемых во время разработки, см. go.microsoft.com/fwlink/?linkid=851728
3. Из опубликованной вами ссылки: «Сам DbContext и любые зависимости в его конструкторе должны быть зарегистрированы как службы в поставщике услуг приложения. Этого можно легко достичь, имея конструктор в DbContext, который принимает экземпляр DbContextOptions<TContext> в качестве аргумента и используя метод AddDbContext<TContext> . » Попробуйте сделать это — создайте параметр в своем конструкторе
DbContextOptions<DataContext> options
.4. @gunr2171 я сделал именно это:
public DataContext(DbContextOptions<DataContext> options) : base(options) { }
к сожалению, он по-прежнему выдает ту же ошибку
Ответ №1:
прежде всего, проверьте строку подключения в appsettings.json и после этого запустите эту команду для миграции
dotnet ef migrations add 1
затем
dotnet ef migrations update
и если это не сработало, проверьте пакет ef core из *.csproject
Ответ №2:
попробуйте добавить пустой конструктор:
общедоступный DataContext() {}
Комментарии:
1. я сделал это, и теперь он выдает другую ошибку:
No database provider has been configured for this DbContext. A provider can be configured by overriding the DbContext.OnConfiguring method or by using AddDbContext on the application service provider. If AddDbContext is used, then also ensure that your DbContext type accepts a DbContextOptions<TContext> object in its constructor and passes it to the base constructor for DbContext.
2. попробуйте переопределить метод OnConfiguring в вашем контексте, подобный этому: защищенное переопределение void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder . IsConfigured) { optionsBuilder. UseSqlServer(«ваша строка подключения идет сюда»); } }
Ответ №3:
поместите ваше (var app = builder.Build();) в Program.cs после добавления вашего контекста