2016-09-28 1 views
1

Сценарий A: Предположим, у вас есть несколько баз данных на том же экземпляре SQL Server/SQL Azure, который использует ту же структуру, где имена баз данных основаны на соглашениях, например db001, db002, ... и одна служба RESTier должна быть способный адресовать правильную базу данных для каждого вызова REST в зависимости от некоторого признака, который должен быть предоставлен в заголовке запроса или в пути URI или строке запроса.Как получить один сервис RESTier 0.6.0, который выбирает базу данных в зависимости от запроса?

Сценарий B: Один сервис RESTier должен иметь возможность адресовать несколько строк соединения, определенных в файле web.config, в зависимости от некоторых характеристик, которые должны быть предоставлены в запросе.

В обоих сценариях базовая проблема одинакова, одна служба RESTier позволяет адресовать запросы более чем одной базе данных, где клиент должен предоставлять по каждому запросу подсказку к используемой базе данных, типичный многопользовательский сценарий. Я использую RESTier версии 0.6 и наборы сущностей автоматически подвергаются от Entity Framework модели:

public class Entities : EntityFrameworkApi<SalesEntities> { 

Вопрос является, как бы вы посоветовали для реализации такого рода сценариев многопользовательских?

ответ

0

Для вашего сценария, я думаю, у вас будет два DbContext, каждый из которых подключается к одному экземпляру БД, тогда что-то вроде этого будет работать на вас?

В методе configure мы дважды вызываем MapRestierRoute, и каждый из них обрабатывает один DbContext с другим префиксом маршрута, а когда пользователь инициирует запрос, URL-адрес запроса будет содержать префикс и будет автоматически маршрутизироваться в соответствующий экземпляр БД.

config.MapRestierRoute> («TrippinApi», «api/TrippinA», новый RestierBatchHandler (сервер)); config.MapRestierRoute> («TrippinApi», «api/TrippinB», новый RestierBatchHandler (сервер));

Позвольте мне, если у вас есть проблемы с этим.

+0

Должен признать, что я не нашел, как использовать префикс маршрута («TrippinA», «TrippinB»), чтобы выбрать экземпляр соответствующей базы данных (скажем, «DBTrippinA», «DBTrippinB»), поэтому что следующие два запроса предназначены для разных баз данных по одному и тому же контроллеру RESTier: http: // myServer/api/TrippinA/Products http: // myServer/api/TrippinB/Products –

+0

Для каждого DBInstance вы должны использовать код сначала и создайте два класса с расширением DBContext, каждый DbContext связан с одним DbInstance. Во время маршрутной карты каждый маршрут связан с одним DbContext. Таким образом, мы можем сделать маршрут, связанный с DbContext. Но обратите внимание, что это не настроено автоматически, но настроено во время запуска приложения. – Vincent

+0

Это означало бы, что я должен заранее определить максимальное количество арендаторов, которые я хочу поддержать (10 арендаторов означают, что 10 DbContexts означают 10 жестко запрограммированных маршрутов), что, как многопользовательский подход, не имеет для меня большого смысла. –

Смежные вопросы