作者:东亚病夫出世_332 | 来源:互联网 | 2022-12-02 13:54
我有一个带有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 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( opt => opt.UseSqlite( "Data Source=" + projectsPath + "\\Projects.db" ) );
services.AddScoped();
我想要实现的是在单个控制器内使用不同的数据库,也使用单个数据库Model
.假设我有两个不同的HttpPost
-Requests ProjectController
:
[HttpPost("{id}/foo")]
和
[HttpPost("{id}/bar")]
如果foo
我想写,foo.db
并且bar
我想写信bar.db
.简单地添加多个调用services.AddDbContext
显然是行不通的.为了实现我的目标,有什么好方法?
1> Shaun Luttin..:
简单地添加多个对services.AddDbContext的调用显然不起作用.
如果您使用继承并AddDbContext
使用子类调用,那么该方法将起作用.
定义两个继承的上下文ProjectContext
.
public class FooContext : ProjectContext {}
public class BarContext : ProjectContext {}
然后使用不同的连接字符串注册它们.
services.AddDbContext(opt => opt.UseSqlite("..."))
services.AddDbContext(opt => opt.UseSqlite("..."))