ASP WEB API multiple DBContext

本文关键字:DBContext multiple API WEB ASP | 更新日期: 2023-09-27 18:11:19

我有app asp.net core web api应用程序与2个控制器OracleController.cs

        [Route("api/[controller]")]
        public class OracleController : Controller
        {
            private readonly OracleDbContext _db;  
            public HeatsController(OracleDbContext context)
            {
                _db = context;
            }
            ...
            protected override void Dispose(bool disposing)
            {
                if (disposing)
                {
                    _db.Dispose();
                }
                base.Dispose(disposing);
            }
    }

SqlServerController.cs

        [Route("api/[controller]")]
        public class SqlServerController: Controller
        {
            private readonly SqlServerDbContext _db;  
            public HeatsController(SqlServerDbContext context)
            {
                _db = context;
            }
            ...
            protected override void Dispose(bool disposing)
            {
                if (disposing)
                {
                    _db.Dispose();
                }
                base.Dispose(disposing);
            }
    }

Startup.cs

public void ConfigureServices(IServiceCollection services)
        {
            services.AddScoped(_ => new OracleDbContext(Configuration["Data:OracleConnectionString"]));
            services.AddScoped(_ => new SqlServerDbContext(Configuration["Data:SqlServerConnectionString"]));
        }

SqlServerDBContext.cs

public class SqlServerConfig : DbConfiguration
    {
        public SqlServerConfig()
        {
            SetProviderServices("System.Data.SqlClient",
             System.Data.Entity.SqlServer.SqlProviderServices.Instance);
        }
    }
    [DbConfigurationType(typeof(SqlServerConfig))]
    public class SqlServerDbContext : DbContext
    {
        public SqlServerDbContext()
            : base("name=SqlServerDbContext")
        {
        }
        public SqlServerDbContext(string nameOrConnectionString) : base(nameOrConnectionString)
        {
        }
        ...
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            ...
        }
    }

应用程序启动后,我只能访问一个DBContext。例如,如果我从OracleController调用一些方法,它工作得很好,但从SqlServerController的方法不工作,他们抛出异常"提供的SqlConnection不指定初始目录或AttachDBFileName."。如果我首先从SqlServerController调用方法,它以同样的方式工作。

ASP WEB API multiple DBContext

您可以在错误消息中看到,您的连接字符串中缺少InitialCatalog属性。这是指定数据库EntityFramework应该连接和启动查询所必需的。