как исправить ошибку No DataBase Provider, когда все в порядке - PullRequest
0 голосов
/ 03 октября 2019

Когда я хочу вставить новый объект в нижнюю часть базы данных, произошла ошибка:

Не настроен поставщик базы данных для этого DbContext

Службы:

private IConfiguration config;
public Startup(IConfiguration config) => this.config = config;

public void ConfigureServices(IServiceCollection services)
    {
        services.AddEntityFrameworkSqlServer().AddDbContext<DataContext>(options => options.UseSqlServer(config["ConnectionStrings:MainConnection"]));

        services.AddMvc();
    }

DataContext:

 public class DataContext:DbContext
{
    public DataContext() { }
    public DataContext(DbContextOptions<DataContext> options) : base(options) { }
    public DbSet<Request> Request { get; set; }
    public DbSet<AdminAccept> AdminAccept { get; set; }
    public DbSet<Payment> Payment { get; set; }
    protected override void OnConfiguring(DbContextOptionsBuilder builder)
    {
        base.OnConfiguring(builder);
    }
}

Команда вставки:

public async Task <int> SaveToStorageAsync()
    {

        using (DataContext context=new DataContext())
        {
            context.Request.Add(this);
            return await context.SaveChangesAsync();
        }
    }

однако миграции и база данных созданы успешно

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

Поскольку вы регистрируете DataContext в конструкторе, получающем DbContextOptions<DataContext> option. Вам также необходимо передать это при создании DataContext

var optionsBuilder = new DbContextOptionsBuilder<DataContext >();
optionsBuilder.UseSqlServer("Your connection string");

using (DataContext context = new DataContext (optionsBuilder.Options))
        {
            context.Request.Add(this);
            return await context.SaveChangesAsync();
        }

Я предлагаю использовать dbContext с помощью DI в контроллеречто является более рекомендуемым способом в ядре asp.net:

public class StudentsController : Controller
{
    private readonly DataContext _context;

    public StudentsController(DataContext context)
    {
        _context = context;
    }
    public async Task <int> SaveToStorageAsync()
    {


        _context.Request.Add(this);
        return await context.SaveChangesAsync();        
    }
}

Два способа включены в ссылку ниже:

https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext#configuring-dbcontextoptions

0 голосов
/ 03 октября 2019

Я наконец решил это.

все в порядке, но использование с использованием выражения вызывает ошибку. (Интересно, почему)

, чтобы решить это прежде всего яудалил использование и объявил DataContext в качестве параметра:

    public async Task<int> SaveToStorageAsync(DataContext context)
    {
        context.Request.Add(this);
        return await context.SaveChangesAsync();
    }

после того, как он инициировал конструктор в главном контроллере:

    DataContext context;

    public HomeController(DataContext context)
    {
        this.context = context;
    }

и, наконец, вызвал функцию, отправив контекств качестве параметра.

прыгал ты использовал в своих сценариях и удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...