首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让一个RESTier 0.6.0服务根据请求选择数据库?

如何让一个RESTier 0.6.0服务根据请求选择数据库?
EN

Stack Overflow用户
提问于 2016-09-28 18:13:47
回答 2查看 251关注 0票数 1

场景A:假设在同一个Server/ same实例上有几个数据库共享完全相同的结构,其中数据库名基于约定,如db001、db002、.而且,单个RESTier服务必须能够为每个REST调用寻址正确的数据库,这取决于请求头或URI路径或查询字符串上提供的某些特性。

场景B:单个RESTier服务必须能够处理多个连接字符串,这是在web.config文件上定义的,这取决于在请求中提供的某些特性。

在这两种情况下,基本问题是相同的,一个RESTier服务能够处理多个数据库的请求,其中客户端必须在每个请求中向要使用的数据库提交一个提示,这是一个典型的多租户场景。我使用的是RESTier版本0.6,实体集自动从实体框架模型公开:

代码语言:javascript
复制
public class Entities : EntityFrameworkApi<SalesEntities> { 

的问题是,您建议如何实现这种多租户方案?

EN

回答 2

Stack Overflow用户

发布于 2019-01-17 13:50:12

您可以使用如下所示的参数化routePrefix,并解析URL的这一部分(HttpContext.Current.Request.RawUrl)。

代码语言:javascript
复制
config.MapRestierRoute<Entities>("EntitiesApi", "api/{entitiesConfig}", new RestierBatchHandler(server)); 

从您的connectionString中检索正确的Web.config并使用它创建DbContext:

代码语言:javascript
复制
Match match = Regex.Match(HttpContext.Current.Request.RawUrl, @"/api/(?<entitiesConfig>[A-Za-z0-9\-]+)/", RegexOptions.IgnoreCase);
string entitiesConfig = "DefaultEntitiesContext";
if (match.Success)
    entitiesConfig = match.Groups["entitiesConfig"];
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings[entitiesConfig].ConnectionString;
var db = new SalesEntities(connectionString);
票数 1
EN

Stack Overflow用户

发布于 2016-09-29 03:34:20

对于您的场景,我认为您将有两个DbContext,每个连接到一个DB实例,然后这样的东西会对您有用吗?

在配置方法中,我们调用两次MapRestierRoute,每个DbContext将处理一个具有不同路由前缀的DbContext,当用户发起请求时,请求URL将包含前缀并自动路由到相关的DB实例。

config.MapRestierRoute>( "TrippinApi","api/TrippinA",新RestierBatchHandler(服务器));config.MapRestierRoute>( "TrippinApi","api/TrippinB",新RestierBatchHandler(服务器));

如果你对此有任何意见的话,让我来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39754812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档