2014-11-09 6 views
0

Я работаю над решением VS2012 с проектом ASP.NET MVC 4.0 и несколькими библиотеками классов, такими как мои менеджеры, поставщики и проекты DataAccess. Мой класс dbContext определен внутри проекта DataAccess.Прочитайте строку подключения из app.config в моем проекте библиотеки DataAccess для dbContext

Моя цель - ограничить информацию о строке соединения в файле App.Config проекта DataAccess. Я пытаюсь избежать указания connectionString в другом месте проекта, так как это мои классы DataAccess, которые будут взаимодействовать с БД.

Теперь, если я укажу свою строку соединения своим классом dbContext, жестко кодируя его, мой проект отлично работает и способен считывать данные из БД.


public MyDbContext() 
     : base(@"Data Source=MYLAPTOP\SQL2012MAIN;Initial Catalog=MyDB;User ID=sa;Password=*****") 
    { 

    } 

Но если указать строку подключения в файле app.config, как это:

<connectionStrings> 
 
<add name="MyDBConnection" connectionString="Data Source=MYLAPTOP\SQL2012MAIN;Initial Catalog=MyDB;User ID=sa;Password=*****;Connect Timeout=200; pooling='true" providerName="System.Data.SqlClient" /> 
 
</connectionStrings>

и использовать его в моем DbContext classs следующим :

public MyDbContext() 
 
      : base("MyDBConnection") 
 
     { 
 

 
     }

Это не работает. Я попытался с помощью той же строки подключения в файле web.config моего проекта MVC также, но потом снова я получаю ту же ошибку (прилагается изображение):

enter image description here

Может кто-нибудь, пожалуйста, руководство меня ...

Благодаря Харя

ответ

0

Я думаю, что ваша вина лежит в объединении, поэтому попробуйте Pooling = True также убедитесь, что для удаления одного перевернутой запятой, что у вас есть, '

Существует один мор e, которую вы, возможно, захотите исследовать, я думаю, что Pooling по умолчанию включен, поэтому установите Pooling = True, в то время как это явное, если я правильно помню, это не имеет никакого эффекта, тогда как Pooling = False имеет эффект.

+0

Эй, Луи, много, чтобы ответить и посмотреть на мою проблему. Эта одиночная цитата (') была проблемой. Как только я удалил его, строка подключения начала работать как ожидается из моего файла web.config. – Hari

+0

Однако, если я использую тот же conn. строка из моего файла app.config. Я получаю следующую ошибку: «При установлении соединения с SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром.Сервер не найден или не был доступен. Проверьте правильность имени экземпляра и настройте SQL Server для удаленного подключения. (провайдер: Сетевые интерфейсы SQL, ошибка: 50 - Произошла ошибка локальной базы данных. Указанный экземпляр LocalDB не существует ». – Hari

+0

Насколько вы думаете, так как мой файл web.config теперь не имеет поля строки подключения, мое приложение может пытаться прочитать его из appHost.config или что-то в этом роде? Ссылка на loaclDB предполагает, что она пытается использовать SQLServerExpress – Hari

0

Чтобы сделать его работу вы можете попробовать вызвать базовый конструктор, как это:

public MyDbContext() 
    : base("MyDBConnection", backend, metadataSource) 
{ 
} 

В этом случае, бэкенд и metadataSource бы поля в классе MyDbContext, которые держат конфигурацию бэкэнд и конфигурацию отображения.

В статье Creating OpenAccessContext вы найдете более подробную информацию о дизайне контекста.