我有一个使用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>();
}
一切都很顺利。
谢谢