我在我的项目中使用web api来公开数据,而这些数据又被移动应用程序和Web应用程序使用。 我想知道公开数据的最佳做法是什么。 例如,我有一个客户注册表,我在其中捕获客户详细信息,包括城市和国家。 公开数据的一种方法是为城市和国家/地区设置单独的控制器,并在客户注册表单上单独 ...
提示:本站收集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>
显然是行不通的。 什么是达到我的目标的好方法?
简单地将多个调用添加到services.AddDbContext显然是行不通的。
如果您使用继承并通过子类调用AddDbContext
,则该方法将起作用。
定义另外两个从ProjectContext
继承的上下文。
public class FooContext : ProjectContext {}
public class BarContext : ProjectContext {}
然后使用不同的连接字符串注册它们。
services.AddDbContext<FooContext>(opt => opt.UseSqlite("..."))
services.AddDbContext<BarContext>(opt => opt.UseSqlite("..."))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.