繁体   English   中英

在单个webapi控制器中使用多个数据库

Using multiple databases in a single webapi Controller

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个带有EntityFramework(2.1)的dotnet核心(2.1)webapi项目

我有一个IProjectRepository接口:

public interface IProjectRepository
{
    void GetProject(Guid id);
    void DeleteProject(Guid id);
    Project CreateProject(Project prj);
    int SaveChanges();
}

我也在ProjectRepository类中实现了它:

public class ProjectRepository : IProjectRepository
{
    private readonly ProjectContext context;

    public ProjectRepository(ProjectContext context)
    {
        this.context = context;
    }

    public Project GetProject(Guid id)
    {
        return context.Projects.Find( id );
    }

    public void DeleteProject(Guid id)
    {
        context.Projects.Remove( project );
    }

    public void CreateProject(Project prj)
    {
        context.Projects.Add(project);
    }

    public int SaveChanges()
    {
        return context.SaveChanges();
    }
}

此外,我有一个ProjectsController

[Route( "api/[controller]" )]
[ApiController]
public class ProjectsController : ControllerBase
{
    private readonly IProjectRepository projectRepository;

    public ProjectsController(IProjectRepository projectRepository)
    {
        this.projectRepository = projectRepository;
    }

    [HttpGet( "{id}", Name = "GetProject" )]
    public ActionResult<Project> GetProjectById( Guid id )
    {
        Project project = projectRepository.GetProject( id );

        if ( project == null )
        {
            return NotFound();
        }
        return project;
    }

    [HttpDelete( "{id}" )]
    public IActionResult DeleteProject( Guid id )
    {
        Project project = projectRepository.GetProject( id );

        if ( project == null )
        {
            return NotFound();
        }

        projectRepository.RemoveProject( project );
        projectRepository.SaveChanges();
        return NoContent();
    }

    /* etc. */
}

我正在Startup.cs - ConfigureServices函数中配置存储库:

services.AddDbContext<ProjectContext>( opt => opt.UseSqlite( "Data Source=" + projectsPath + "\\Projects.db" ) );
services.AddScoped<IProjectRepository, ProjectRepository>();

我要实现的是在单个控制器内使用不同的数据库,并使用单个Model 因此,假设我在ProjectController有两个不同的HttpPost -Requests:

[HttpPost("{id}/foo")]

[HttpPost("{id}/bar")]

foo情况下,我想写到foo.db ;在bar情况下,我想写到bar.db 简单地将多个调用添加到services.AddDbContext<ProjectContext>显然是行不通的。 什么是达到我的目标的好方法?

1 个回复

简单地将多个调用添加到services.AddDbContext显然是行不通的。

如果您使用继承并通过子类调用AddDbContext ,则该方法将起作用。

定义另外两个从ProjectContext继承的上下文。

public class FooContext : ProjectContext {}

public class BarContext : ProjectContext {}

然后使用不同的连接字符串注册它们。

services.AddDbContext<FooContext>(opt => opt.UseSqlite("..."))

services.AddDbContext<BarContext>(opt => opt.UseSqlite("..."))
1 Web Api - 每个数据库实体或每个UI屏幕的控制器

我在我的项目中使用web api来公开数据,而这些数据又被移动应用程序和Web应用程序使用。 我想知道公开数据的最佳做法是什么。 例如,我有一个客户注册表,我在其中捕获客户详细信息,包括城市和国家。 公开数据的一种方法是为城市和国家/地区设置单独的控制器,并在客户注册表单上单独 ...

3 在单个数据库中使用hangfire的多个实例

是否有人在同一SQL DB上使用过多个Hangfire实例(在不同的应用程序中)以进行配置。 因此,我不想为每个hangfire实例创建新的SQL DB,而是与多个实例共享同一数据库。 根据此处的hangfire 文档 ,自v1.5开始支持该功能。但是此处和此处的论坛讨论显示,使用同一数 ...

2017-06-29 17:16:05 1 1852   hangfire
6 在asp.net mvc控制器中的数据库mysql中选择多个数据

我有一个关于从数据库中选择数据的问题,我真的不知道为什么。 如果我添加此sheet.Add(sheetModel); 对于我的其他查询,它为我的表行提供了不可见的数据。 我这里有第一个选择数据查询: 给我以下结果: 但我想选择使用第二个查询: 如果将查询添加 ...

7 转换Web API控制器以使用模型代替直接数据库

我们创建了用于查询Oracle数据库的Web API,并以JSON格式返回结果。 Web API接受两个输入参数组成的数组,一个是需要选择的列名数组,另一个是在WHERE子句中使用的ID数组。 在我们的案例中,使用各种表和各种联接的SQL语句非常复杂,因此我只是在这里给出一个简单的Selec ...

8 使用多个数据库的Web API身份验证

我已经使用MySQL DB创建了一个示例WEB API。 其中使用的身份验证为基本身份验证 。 身份验证是基于用户的,因为我在其中创建了一个用户表,同时将其转换为64位编码并将其与用户名和密码进行匹配。 现在,我想创建一个实际的WEB API。 MySQL中都有两个数据库。 将使用 ...

9 使用 web api 连接多个数据库

我是 .net core 的新手。 如何使用 .net core 开发 web-api 来连接多个数据库服务器(例如 mssql、oracle、postgresql...)并根据用户选择选择连接字符串并连接到相应的数据库。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM