Entity Framework: «Основной поставщик не удалось открыть» - PullRequest
17 голосов
/ 16 мая 2010

Когда я пытаюсь вставить запись, я получаю эту ошибку: Ошибка основного поставщика при открытии. Эта ошибка возникает только в IIS, а не в веб-сервере VWD 2008. В EventViewer я получаю эту ошибку приложения: Не удалось сгенерировать пользовательский экземпляр SQL Server из-за сбоя при запуске процесса для пользовательского экземпляра. Соединение будет закрыто. [КЛИЕНТ:]

<add name="ASPNETDBEntities"
     connectionString="
         metadata=res://*/Models.FriendList.csdl|res://*/Models.FriendList.ssdl|res://*/Models.FriendList.msl;
         provider=System.Data.SqlClient;
         provider connection string=&quot;
         Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ASPNETDB.MDF;
         Integrated Security=True;
         Connect Timeout=30;
         User Instance=True;
         MultipleActiveResultSets=True&quot;"
     providerName="System.Data.EntityClient" />

Я использую файл aspnetdb.mdf, а не какую-либо внешнюю базу данных. Я искал достаточно для этого, но бесполезно.

Все отлично работает с веб-сервером VWD

Ответы [ 10 ]

10 голосов
/ 17 мая 2010

Вы должны создать учетную запись sql для своего веб-сервера для доступа к базе данных aspnetdb. В настоящее время используется встроенная проверка подлинности (пытается войти в систему с использованием идентификатора, используемого веб-сервером для запуска приложения).

В приведенном ниже примере используется встроенная аутентификация. Я бы использовал аутентификацию SQL, хотя.

http://msdn.microsoft.com/en-us/library/ff649314.aspx

3 голосов
/ 27 марта 2011

У меня возникла та же проблема, и после выполнения отладки я увидел, что создаю новый экземпляр DB Entity для каждого действия, а создание нового экземпляра Db Entity означает открытие нового соединения с db.

Ниже приведен код:

Private tmpConnection As New DbModel.DbEntities

поэтому, вызывая переменную снова и снова, она создает новый экземпляр DbEntites и открывает новое соединение с БД.

поэтому я пишу небольшую функцию для этого, и это решило мою проблему. Теперь ошибки больше нет.

Private tmpConnection As DbModel.DbEntities

Public Function dbCon() As DbModel.DbEntities

    If tmpConnection IsNot Nothing Then

        If tmpConnection.Connection.State = ConnectionState.Closed Then

            Try
                tmpConnection.Connection.Open()
                Return tmpConnection
            Catch ex As Exception
                My.Response.Redirect("dberror.aspx")
            End Try

        Else

            Return tmpConnection

        End If

    Else

        tmpConnection = New DbModel.DbEntities

        Try
            tmpConnection.Connection.Open()
            Return tmpConnection
        Catch ex As Exception
            My.Response.Redirect("dberror.aspx")
        End Try

    End If

    Return Nothing
End Function

и, наконец, в строке подключения, пожалуйста, добавьте "Connect Timeout = 30;"

это работает так идеально для меня

2 голосов
/ 05 июля 2011

Использование нового экземпляра DB Entity для каждого действия не должно физически создавать соединение с вашим SQL-сервером. Entity Framework будет использовать пул соединений, созданный для вашего (процесс, домен приложения, строка соединения), как настроено в строке соединения, чтобы избежать создания новых соединений.

Эта проблема очень экологична, и параметры настройки (в вашей строке подключения), как показано ниже, должны решить проблему -

Минимальный размер пула = 1;

Максимальный размер пула = 100; // по умолчанию

Время ожидания подключения = 15; // в секундах

Аккумулирование = TRUE;

1 голос
/ 19 ноября 2012

В моем случае я использовал Sql CE, и моя строка подключения была настроена с абсолютным путем вместо inf | DataDirectory | переменная. Изменил это, и он начал работать на сервере.

Очевидно, что он отлично работал на компьютере разработчика.

0 голосов
/ 16 апреля 2013

Эта проблема возникает, когда база данных добавлена ​​в ServerExplorer в качестве аутентификации Windows. Когда вы используете sql-аутентификацию во время добавления базы данных в ServerExplorer, проблема решается. Если вы все еще используете проверку подлинности Windows и избегаете этого исключения, укажите идентификатор пользователя и пароль базы данных в строке подключения в файле webconfig.

Эта проблема возникает только тогда, когда мы размещаем службу в IIS

0 голосов
/ 31 декабря 2012

У меня была похожая проблема, и я также использую IIS. Я открыл командное окно и набрал iisreset. Проблема решена.

0 голосов
/ 05 июля 2012

Это исключение создается, когда есть что-то, что может привести к тому, что строка вашего соединения будет недопустимой. Неверные учетные данные были причиной для меня.

0 голосов
/ 03 февраля 2012

Кроме того, это исключение выдается, когда таблица, которой вы собираетесь манипулировать, удалена или не существует

0 голосов
/ 18 января 2011

Возможно, уже слишком поздно, чтобы ответить, но у меня была такая же проблема.

Я добавил время ожидания (5 минут). Я приведу пример.

Dim varIntervalo As New TimeSpan(0, 5, 0)
Using varTransaccion As New TransactionScope(TransactionScopeOption.Required, varIntervalo)
    For vari As Integer = 2 To varMatrizDatos.GetUpperBound(0)
        Dim varWhateverAs New TABLE
        varWhatever.ID_TABLE = something
        varWhatever.DESC_TABLE = something else
        varWhatever.DATE_TABLE = CDate(Now.Date)

        varEntidades.AddToTABLESet(varWhatever)
        varEntidades.SaveChanges()
    Next
    varTransaccion.Complete()
End Using

Может быть, этот код можно улучшить.

0 голосов
/ 07 июня 2010

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

<add 
     name="ASPNETDBEntities" 
     connectionString="metadata=res://*/Models.FriendList.csdl|
                       res://*Models.FriendList.ssdl|res://*/Models.FriendList.msl;
                       provider=System.Data.SqlClient;provider connection string=&quot;
                       Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ASPNETDB.MDF;
                       Integrated Security=True;Connect Timeout=30;
                       User Instance=True;
                       MultipleActiveResultSets=True&quot;" 
     ProviderName="System.Data.EntityClient" 
     User Instance="False"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...