EntityFramework Database.EnsureCreated() 试图在错误的路径中创建 mdf
EntityFramework Database.EnsureCreated() trying to create mdf in wrong path
我在使用 Entity Framework 核心的方法 Database.EnsureCreated() 时遇到奇怪的问题。它发生在许多干净安装的计算机上。
如您所见,它尝试使用此路径创建 mdf 文件
c:\Users\AdminBLTManager.mdf
虽然应该是:
c:\Users\Admin\BLTManager.mdf
代码没什么特别的:
class CreateInitialDataIfDbIsEmptyBgService : IHostedService
{
private readonly ILogger _logger;
private readonly IServiceProvider _serviceProvider;
public CreateInitialDataIfDbIsEmptyBgService(IServiceProvider serviceProvider, ILogger<MigrateDatabaseBgService> logger)
{
_serviceProvider = serviceProvider;
_logger = logger;
}
public async Task StartAsync(CancellationToken cancellationToken)
{
using var scope = _serviceProvider.CreateScope();
_logger.LogWarning("Ensuring database exists...");
var dbContext = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
dbContext.Database.EnsureCreated();
_logger.LogWarning("Ensuring initial admin user exists when db is newly created...");
}
public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
}
这是 ConfigureServices() 中的 运行
services.AddHostedService<CreateInitialDataIfDbIsEmptyBgService>();
奇怪的是这只发生在某些计算机上,而不是在我的开发环境中。
编辑:
连接字符串:
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\MSSQLLocalDB;Database=BLTManager;Trusted_Connection=True;MultipleActiveResultSets=true"
},
正在注册 ApplicationDbContext:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDatabaseDeveloperPageExceptionFilter();
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
.....
}
这看起来像是一个旧的 LocalDB 错误 we hit once。我认为它在 2017 年最初发布后的某个时间得到修复。尝试更新以查看它是否消失。
我在使用 Entity Framework 核心的方法 Database.EnsureCreated() 时遇到奇怪的问题。它发生在许多干净安装的计算机上。
如您所见,它尝试使用此路径创建 mdf 文件
c:\Users\AdminBLTManager.mdf
虽然应该是:
c:\Users\Admin\BLTManager.mdf
代码没什么特别的:
class CreateInitialDataIfDbIsEmptyBgService : IHostedService
{
private readonly ILogger _logger;
private readonly IServiceProvider _serviceProvider;
public CreateInitialDataIfDbIsEmptyBgService(IServiceProvider serviceProvider, ILogger<MigrateDatabaseBgService> logger)
{
_serviceProvider = serviceProvider;
_logger = logger;
}
public async Task StartAsync(CancellationToken cancellationToken)
{
using var scope = _serviceProvider.CreateScope();
_logger.LogWarning("Ensuring database exists...");
var dbContext = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
dbContext.Database.EnsureCreated();
_logger.LogWarning("Ensuring initial admin user exists when db is newly created...");
}
public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
}
这是 ConfigureServices() 中的 运行
services.AddHostedService<CreateInitialDataIfDbIsEmptyBgService>();
奇怪的是这只发生在某些计算机上,而不是在我的开发环境中。
编辑:
连接字符串:
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\MSSQLLocalDB;Database=BLTManager;Trusted_Connection=True;MultipleActiveResultSets=true"
},
正在注册 ApplicationDbContext:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDatabaseDeveloperPageExceptionFilter();
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
.....
}
这看起来像是一个旧的 LocalDB 错误 we hit once。我认为它在 2017 年最初发布后的某个时间得到修复。尝试更新以查看它是否消失。