blazor应用程序中带有ef代码的Oracle连接字符串



我有一个使用Oracle数据库的Blazor服务器项目。当我尝试使用连接时

"ConnectionStrings": {
"GTravelDbConnection": "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVER=dedicated)(SERVICE_NAME=XE)));User Id=GTRAVEL;  Password=cteam;"

在appsettings.json中,并在program.cs中使用以下代码

var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("GTravelDbConnection");
builder.Services.AddDbContext<GTravelDbContext>(
options => options.UseOracle(connectionString)
);

我得到错误

尚未为此DbContext配置任何数据库提供程序。可以通过重写"DbContext.OnConfiguring"方法或在应用程序服务提供程序上使用"AddDbContext"来配置提供程序。如果使用了"AddDbContext",请确保您的DbContext类型在其构造函数中接受DbContextOptions对象,并将其传递给DbContext的基构造函数。

如果从dbcontext类中使用,则为相同的连接字符串

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseOracle("Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVER=dedicated)(SERVICE_NAME=XE)));User Id=GTRAVEL;  Password=cteam;");  
}
}

工作没有问题。

如果有人能帮助我,我将不胜感激。

问题是我试图在不创建作用域的情况下使用作用域服务。当我在程序.cs 中使用以下代码时

var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("GTravelDbConnection");
builder.Services.AddDbContext<GTravelDbContext>(
options => options.UseOracle(connectionString)

);
builder.Services.AddScoped<ICustomerService, CustomerService>();
using (var serviceScope = app.Services.CreateScope())
{
var services = serviceScope.ServiceProvider;
var customerService = services.GetRequiredService<ICustomerService>();
}

一切都很顺利。

谢谢

最新更新