Създавам мултитенантно 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 „заместител“ по-късно в конвейера .
Смятам, че това трябва да е доста лесно и просто не мога да намеря „куката“. Може ли някой да помогне?