2014-12-10 4 views
1

У меня проблема. Я создаю webAPI с ASP.NET MVC, у меня есть три разных проекта с тремя отдельными базами данных.Рекомендации по WebAPI и несколько баз данных

У меня есть способ сделать вставку в одну таблицу. Эта таблица существует в трех базах данных.

Клиент отправляет мне проект в строку.

Мой вопрос:

1 - Должен ли я разделить WebAPI в трех различных URLS? 2- я не хочу, чтобы создать переключатель или если-ElseIf в контроллере так:

switch (project) { 
case project1: 
    objectdatabase1 
case project2: 
    objectdatabase2 
case project3 
    objectdatabase3 
} 

Потому что я думаю, что он ломает ОТКРЫТЫЙ ЗАКРЫТО Solid принцип.

3- Также я хотел бы добавить объект базы данных в контроллер с помощью Unity, выполняющего инъекцию зависимостей.

Любые идеи сделать это наилучшим образом?

Спасибо!

+0

Это может быть хорошим кандидатом для «TRIGGER» в вашей базе данных, вместо того, чтобы Web API обрабатывать все вставки в трех разных базах данных, просто вставляйте их в один и позволяйте триггерам делать все остальное. –

ответ

0

В зависимости от того, что вы используете для подключения к этим базам данных, вы можете просто использовать named connectionStrings. Назовите их как проекты (независимо от того, какая строка отправляет клиент) или имеют какое-либо соглашение (например, param + "_ connString").

Затем, чтобы ваш объект доступа к БД открыл соединение с помощью этой конкретной connectionString и выполнил любой запрос, который вы хотите.

Использование специализированного именования (как Project1_SomeKeyword_connectionString, Project2_SomeKeyword_connectionString и т.д.) как раз для этого случая будет ограничивать потенциальные проблемы безопасности, в случае, если кто-то будет злонамеренно попытаться угадать ConnectionString имя, которое не следует использовать для этой цели (для внутреннего дб или что-то еще).

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

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

0

Как создать несколько моделей EntityFramework? Поэтому каждая модель будет подключаться к другой базе данных.

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