Entity Framework: "ProviderName" в строке подключения требуется - внезапно?
Мы используем фреймворк Entity в рабочей среде уже много месяцев, и только вчера начали получать ошибки на некоторых компьютерах при запросе базы данных с использованием нашего подкласса DbContext:
"Строка подключения MyConnectionString в приложении файл конфигурации не содержит требуемого имени поставщика атрибут"
Наша задача легко решена: я добавляю "providerName="System.Data.SqlClient"
к строке подключения в файлах конфигурации на всех развернутых серверах и рабочих станциях.
Однако тайна остается: согласно документации:
Атрибут providerName не является обязательным, и по умолчанию используется "System.Data.SqlClient".
Еще более загадочно, почему это началось внезапно и, видимо, только на некоторых машинах. Мне неизвестны какие-либо недавние изменения в версиях EF или .NET, изменения версии или поставщика SQL Server или что-то еще. Но я понимаю, что должно быть что-то, что я забыл.
.NET 4.5
EF 5.0
У кого-нибудь есть подсказки или идеи?
Ответы
Ответ 1
Некоторые комбинации драйверов приведут к тому, что аппарат будет находиться в состоянии, когда он неоднозначен, какой драйвер он должен использовать, поэтому для него требуется явное имя поставщика.
Вероятно, это было какое-то другое отдельное приложение или драйвер, или автоматический запуск Windows Update.
Явное указание имени поставщика ничем не повредит. Вы должны добавить его; это всего лишь несколько дополнительных символов в вашей строке соединения. Это никогда не изменится в будущем или что-то еще.
Ваше обновленное выражение должно выглядеть следующим образом:
<connectionStrings>
<add name="<My connection string name>" connectionString="<Connection string proper>" providerName="System.Data.SqlClient" />
</connectionStrings>
Ответ 2
Вы также можете использовать:
providerName="System.Data.EntityClient"
то
<add name="name_here" connectionString="Data Source="pathofdatabase" providerName="System.Data.EntityClient" />