Gue*_*unt 3 c# entity-framework asp.net-core
我正在尝试将Entity Framework和Identity分离到另一个库,但是使用时我无法进行任何迁移builder.UseInMemoryDatabase(connectionString);。
更改为时,我可以进行迁移builder.UseSqlServer(connectionString);,但是我需要使用UseInMemoryDatabase。
当我尝试添加迁移时,这是错误:
无法解析类型为Microsoft.EntityFrameworkCore.Migrations.IMigrator的服务。这通常是因为尚未为此DbContext配置任何数据库提供程序。可以通过重写DbContext.OnConfiguring方法或在应用程序服务提供程序上使用AddDbContext来配置提供程序。如果使用AddDbContext,则还应确保DbContext类型在其构造函数中接受DbContextOptions对象,并将其传递给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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是参考
<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>
Run Code Online (Sandbox Code Playgroud)
但是using Microsoft.EntityFrameworkCore.InMemory;未使用的名称空间。
内存中的概念旨在模拟内存(RAM)中的数据库。迁移用于生成/更新数据库架构到连接的数据库。内存数据库不需要迁移。您可以直接启动应用程序并开始使用DBContext,而无需尝试添加迁移。
至于您对Microsoft.EntityFrameworkCore.InMemory命名空间的困惑,您尚未编写任何使用该Microsoft.EntityFrameworkCore.InMemory命名空间的代码。请注意,并非NuGet包下的每个类都在名称空间下。为方便起见,UseInMemoryDatabase扩展功能在Microsoft.EntityFrameworkCore名称空间内创建。这样,您不必每次更改数据库时都添加using语句。
| 归档时间: |
|
| 查看次数: |
937 次 |
| 最近记录: |