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" />