У меня есть проект webapi dotnet core (2.1) с EntityFramework (2.1)
У меня есть 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
.Итак, если у меня есть два разных HttpPost
-запроса в моих ProjectController
:
[HttpPost("{id}/foo")]
и
[HttpPost("{id}/bar")]
В случае foo
Я хочу написать в foo.db
а в случае bar
я хочу написать bar.db
.Простое добавление нескольких вызовов к services.AddDbContext<ProjectContext>
, очевидно, не сработает.Какой хороший подход для достижения моей цели?