Я создаю мультитенантное веб-приложение Asp.Net MVC 3 и вначале использую код EF4.1 для модели db.
Для разработки я рад использовать 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 и предоставляя строку подключения (используя строку conn 'placeholder' в Web.config и заменяя "{clientId} "с уникальным идентификатором), и я также попытался установить строку подключения в конструкторе MyModels:
base.Database.Connection.ConnectionString = xxx;
, но, похоже, это никогда не работает.Я всегда получаю следующую ошибку:
Произошла ошибка, связанная с сетью или экземпляром, при установлении соединения с SQL Server.Сервер не найден или не был доступен.Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений.(провайдер: поставщик именованных каналов, ошибка: 40 - не удалось открыть соединение с SQL Server)
(предполагается, что он еще не «настроен» на использование SqlServerCE, поэтому пытается подключиться к SqlСервер. Я думаю!)
Трассировка кода, Database.Connection.ConnectionString не была прочитана из Web.config на данный момент, поэтому я не могу найти и заменить его, и, возможно, он получаетперезаписывается строкой conn «placeholder» позже в конвейере.
Я считаю, что это должно быть довольно просто, и я просто не могу найти «крючок».Может кто-нибудь помочь, пожалуйста?