Приложение: Asp.NET Core 1.1.1, EF Core.
Платформа: Visual Studio 2017 5.3.3.
Режим аутентификации: индивидуальные учетные записи пользователей
Следуйте этому руководству от ASP. NET, следующая команда выполняется успешно:
PM> Add-Migration MyFirstMigration -context BloggingContext
Как мы знаем, VS2017
по умолчанию создает ApplicationDbContext
в папке MyProject \ Data для создания пользовательских таблиц (ASPNETUsers, ASPNETRoles etc...
) для аутентификации. Но для этого, когда я запускаю следующую команду, она сначала дает мне Error-1
ниже. И когда я следую инструкциям в первом сообщении об ошибке, я получаю Error-2
ниже. Вопрос: Как заставить работать следующую команду без использования IDbContextFactory
?
PM> Add-Migration MyFirstAuthenMigration -context ApplicationDbContext
Ошибка 1
В ApplicationDbContext не найден конструктор без параметров. Либо добавьте конструктор без параметров в ApplicationDbContext, либо добавьте реализацию IDbContextFactory в ту же сборку, что и ApplicationDbContext.
После добавления конструктора без параметров в ApplicationDbContext.cs
(показано ниже) я получаю вторую ошибку, показанную ниже:
Ошибка 2
Для этого DbContext не настроен поставщик базы данных. Поставщика можно настроить, переопределив метод DbContext.OnConfiguring или используя AddDbContext в поставщике службы приложения. Если используется AddDbContext, также убедитесь, что ваш тип DbContext принимает объект DbContextOptions в своем конструкторе и передает его в базовый конструктор для DbContext.
ApplicationDbContext.cs
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
//NOTE: I added following constructor after Error 1 shown above
public ApplicationDbContext()
{
}
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
}
}
startup.cs
я заменилservices.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
наvar connection = @"Server=MyMachine\SQLEXPRESS;Database=ForgotPswd;Trusted_Connection=True;"; services.AddDbContext<BloggingContext>(options => options.UseSqlServer(connection));
. Это правильно? - person nam   schedule 04.09.2017Register your context with dependency injection
документа ссылка. Я думаю, что путаница заключается в том, что связанный учебник не используетAuthentication mode
, в то время как я использую учебник, но с дополнительным шагом, который связан сAuthentication mode
. А для использования таблиц блогов и сообщений мне нужно, чтобы BloggingContext был зарегистрирован сDependency Injection
. - person nam   schedule 04.09.2017