Я пытаюсь разделить свою Entity Framework и Identity на другую библиотеку, но я не могу выполнять миграции, когда использую builder.UseInMemoryDatabase(connectionString);.
Я могу выполнять миграции, когда меняю его на builder.UseSqlServer(connectionString);, но мне нужно использовать UseInMemoryDatabase.
Вот ошибка, когда я пытаюсь добавить миграцию:
Unable to resolve service for type Microsoft.EntityFrameworkCore.Migrations.IMigrator'. This is often because 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 object in its constructor and passes it to the base constructor for DbContext.`
Код:
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.EntityFrameworkCore.InMemory;
using Microsoft.Extensions.Configuration;
using System;
using System.IO;
namespace ClassLibrary1
{
public class ApplicationUser : IdentityUser
{
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//modelBuilder.ApplyConfigurationsFromAssembly(typeof(ApplicationDbContext).Assembly);
base.OnModelCreating(modelBuilder);
}
}
public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
{
public ApplicationDbContextFactory()
{
}
public ApplicationDbContext CreateDbContext(string[] args)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var builder = new DbContextOptionsBuilder<ApplicationDbContext>();
var connectionString = configuration.GetConnectionString("DefaultConnection");
builder.UseInMemoryDatabase(connectionString);
return new ApplicationDbContext(builder.Options);
}
}
}
и это ссылка
<ItemGroup>
<PackageReference Include = "Microsoft.AspNetCore.App" />
<PackageReference Include = "Microsoft.AspNetCore.Razor.Design" Version = "2.2.0" PrivateAssets = "All" />
<PackageReference Include = "Microsoft.EntityFrameworkCore.InMemory" Version = "2.2.1" />
</ItemGroup>
но using Microsoft.EntityFrameworkCore.InMemory; - это неиспользуемое пространство имен.
потому что я не хочу иметь дело с sqlserver во время разработки.
theres localdb, который является опцией. в памяти - это кратковременная вещь, не имеющая миграций.





Концепция in-memory предназначена для имитации вашей базы данных в вашей памяти (RAM). Миграции используются для создания / обновления схемы вашей базы данных в подключенной базе данных. База данных в памяти не требует миграции. Вы можете напрямую запустить свое приложение и начать использовать свой DBContext, не пытаясь добавить миграции.
Что касается вашей путаницы с пространством имен Microsoft.EntityFrameworkCore.InMemory, вы не написали никакого кода, который использует пространство имен Microsoft.EntityFrameworkCore.InMemory. Обратите внимание, что не каждый класс в пакете NuGet находится в пространстве имен. Для удобства функция расширения UseInMemoryDatabase создана в пространстве имен Microsoft.EntityFrameworkCore. Таким образом, вам не нужно добавлять оператор using каждый раз, когда вы меняете свой db.
о, я просто подумал, что мне нужна другая схема миграции, если я буду использовать inmemorydatabase
почему вы выполняете миграции как часть использования поставщика inmemory?