Для этого DbContext не настроен поставщик базы данных, даже при передаче DbContextOptions в конструктор - PullRequest
0 голосов
/ 13 февраля 2020

Я видел много проблем в сети по этому поводу, однако, похоже, что ответ, что ваш класс DbContext имеет конструктор для DbContextOptions.

Тем не менее, я отладил, и я вижу, что правильный конструктор вызывается, но я все еще получаю сообщение об ошибке «Не настроен поставщик базы данных для этого DbContext»: (

Вот соответствующий код из моего Controller.cs:

Microsoft.EntityFrameworkCore.DbContextOptions<CoreContext> options = new Microsoft.EntityFrameworkCore.DbContextOptions<CoreContext>();
using (CoreContext dbContext = new CoreContext(options)) 
{
    dbContext.Person.Add(person);
    dbContext.SaveChanges();
    id = person.PkPersonId;
}

Это конструктор для моего CoreContext.cs:

public CoreContext(DbContextOptions<CoreContext> options)
            : base(options)
        {
        }

А вот мой метод конфигурации Startup.cs:

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();

            services.AddIdentity<IdentityUser, IdentityRole>(options => { options.Password.RequiredLength = 10; })
                .AddEntityFrameworkStores<CoreContext>();

            services.AddDbContext<CoreContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase")));

        }

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Вам нужно определить детали сущностей в DBContext, тогда только вы сможете получить доступ к сущностям базы данных, иначе вы получите ошибку. Поэтому, пожалуйста, следуйте приведенному ниже коду для решения этой проблемы.

public CoreContext(DbContextOptions<CoreContext> options): base(options)
{
   public virtual DbSet<Person> Persons { get; set; }
}
0 голосов
/ 13 февраля 2020

Мне нужно было использовать версию контейнера вместо того, чтобы снова пытаться создать экземпляр DbContext

Итак, просто вставил Dbcontext в мой контроллер:

        private CoreContext _coreContext;

        public AccountController(CoreContext coreContext)
        {
             private CoreContext _coreContext;

, затем изменил следующий код с:

Microsoft.EntityFrameworkCore.DbContextOptions<CoreContext> options = new Microsoft.EntityFrameworkCore.DbContextOptions<CoreContext>();
using (CoreContext dbContext = new CoreContext(options)) 
{
    dbContext.Person.Add(person);
    dbContext.SaveChanges();
    id = person.PkPersonId;
}

Всего:

_coreContext.Person.Add(person);
_coreContext.SaveChanges();
id = person.PkPersonId;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...