Я создаю мультитенантное веб-приложение Asp.Net MVC 3 и сначала использую код EF4.1 для модели базы данных.
Для разработки я рад использовать SqlServerCE в App_Data, а для производства это перейдет на Sql Server 2008.
Скажем, мой контекст называется «MyModels», по умолчанию код сначала ищет строку подключения с именем «MyModels» в Web.config. Этому можно указать использовать файл в App_Data или изменить для доступа к базе данных в SQL2008. Пока все в порядке.
Но из-за мультиарендности я хотел бы, чтобы имя файла SqlServerCE соответствовало уникальному идентификатору арендатора (поэтому App_Data будет иметь «client_x.sdf», «client_y.sdf»; Sql Server 2008 будет иметь отдельные базы данных). Я не могу понять, как обращаться к этим разным базам данных.
Я пробовал MyModels, наследующий от DbContext и предоставляющий строку подключения (используя строку подключения «заполнитель» в Web.config и заменяя «{clientId}» уникальным идентификатором), и я также пытался установить строку подключения в Конструктор MyModels:
base.Database.Connection.ConnectionString = xxx;
но это никогда не работает. Я всегда получаю следующую ошибку:
При установлении соединения с SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен на разрешение удаленных подключений. (поставщик: поставщик именованных каналов, ошибка: 40 — не удалось открыть соединение с SQL Server)
(Это говорит о том, что он еще не «настроен» для использования SqlServerCE, и поэтому пытается подключиться к Sql Server. Я думаю!)
Отслеживая код, Database.Connection.ConnectionString на данный момент не был прочитан из Web.config, поэтому я не могу найти и заменить его, и, возможно, позже в конвейере он будет перезаписан строкой соединения «заполнитель». .
Я считаю, что это должно быть довольно просто, и я просто не могу найти «крючок». Кто-нибудь может помочь?