Entity SQLCE Не удается найти строку подключения в файле app.config - PullRequest
3 голосов
/ 21 сентября 2011

Я получаю эту ошибку при попытке использовать контейнер моей модели:

Не удалось найти строку подключения с именем 'PFModelContainer' в файл конфигурации приложения.

У меня есть файл edmx в отдельном проекте. Я проверил файл app.config, и моя модель была там, и я также поместил его в мой основной файл app.config проекта. Все еще не работает. Вот строка подключения:

    <connectionStrings>
        <add name="PFModelContainer" 
             connectionString="metadata=res://*/PFModel.csdl|res:
                               //*/PFModel.ssdl|res://*/PFModel.msl;
             provider=System.Data.SqlServerCe.3.5;
             provider connection string=&quot;
             Data Source=C:\Documents and Settings\Jon\My Documents\Visual
                         Studio 2010\Projects\SpreadsheetAddIn
                         \SpreadsheetAddIn\bin\Debug\PFData.sdf;
             Password=password&quot;" 
             providerName="System.Data.EntityClient" />
    </connectionStrings>

Вот как называется контекст:

Private mdbContext As New PFModelContainer

Что идет к:

Partial Public Class PFModelContainer
    Inherits DbContext

    Public Sub New()
        MyBase.New("name=PFModelContainer")
    End Sub

Я думал, что ответ будет похож на то, что случилось с этим парнем . Но, к сожалению, его решение не работает с моим.

Обновление:

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

Dim dbContext As New PFModelContainer
Dim dbAccount As IQueryable(Of Account)
dbAccount = From a In dbContext.Accounts
            Where (a.AccountName = "Hello")
            Select a

Обновление (То, что я пробовал для строк подключения - я могу вспомнить):

1 Основной проект: -> Создание по умолчанию

<add name="PFModelContainer" 
     connectionString="metadata=res://*/PFModel.csdl|
                                res://*/PFModel.ssdl|
                                res://*/PFModel.msl;
     provider=System.Data.SqlServerCe.3.5;
     provider connection string=&quot;
       Data Source=C:\Documents and Settings\Jon\My Documents\Visual Studio 2010\Projects\SpreadsheetAddIn\PFDatabase\bin\Debug\PFData.sdf;
       Password=password&quot;" 
     providerName="System.Data.EntityClient" />

библиотека

<add name="PFModelContainer" 
     connectionString="metadata=res://*/PFModel.csdl|
                                res://*/PFModel.ssdl|
                                res://*/PFModel.msl;
     provider=System.Data.SqlServerCe.3.5;
     provider connection string=&quot;
     Data Source=|DataDirectory|\bin\Debug\PFData.sdf;
       Password=password&quot;" 
       providerName="System.Data.EntityClient" />

2 Основной проект: -> Заменить * на PFDatabase

<add name="PFModelContainer" 
     connectionString="metadata=res://PFDatabase/PFModel.csdl|
                                res://PFDatabase/PFModel.ssdl|
                                res://PFDatabase/PFModel.msl;
                                [...Same...]

Библиотека: [... То же самое с модификациями ...]

3 Основной проект: -> Заменить res: // * / на. \

<add name="PFModelContainer" 
     connectionString="metadata=.\PFModel.csdl|
                                .\PFModel.ssdl|
                                .\PFModel.msl;
                                [...Same...]

библиотека [... То же самое с модификациями ...]

4 Основной проект: -> Заменить res: // * / на ~ \

<add name="PFModelContainer" 
     connectionString="metadata=~\PFModel.csdl|
                                ~\PFModel.ssdl|
                                ~\PFModel.msl;
                                [...Same...]

Библиотека: [... То же самое с модификациями ...]

Ответы [ 2 ]

2 голосов
/ 21 сентября 2011

Если вы помещаете модель edmx в отдельную библиотеку классов, добавьте app.config в эту библиотеку классов и добавьте строку подключения в эту конфигурацию.

Кроме того, если ваша модель данных находится в пространстве имен, вам придется включить полное пространство имен в путь к ресурсу:

Например, если вы поместили свой файл edmx в сборку с именем MyProject.DataLayer, а пространство имен для сгенерированного кода - MyProject.DataLayer.DataModel, тогда ваша строка конфигурации должна быть:

<add name="PFModelContainer"
         connectionString="metadata=res://*/DataModel.PFModel.csdl|res:
                           //*/DataModel.PFModel.ssdl|res://*/DataModel.PFModel.msl;
         provider=System.Data.SqlServerCe.3.5;
         provider connection string=&quot;
         Data Source=C:\Documents and Settings\Jon\My Documents\Visual
                     Studio 2010\Projects\SpreadsheetAddIn
                     \SpreadsheetAddIn\bin\Debug\PFData.sdf;
         Password=password&quot;"
         providerName="System.Data.EntityClient" />
0 голосов
/ 24 сентября 2011

Получил некоторую помощь от обмена экспертами по этому вопросу.Закончил работу вокруг (не уверен, почему он не работал так, как должен), так как я использую DbContext вместо EntityObject, мне пришлось создать свою собственную переопределяемую процедуру, как (вторая ниже):

Public Sub New()
   MyBase.New("name=PFModelContainer")
End Sub

Public Sub New(ByVal connectionString As String)
   MyBase.New(connectionString)
End Sub

Затем мне пришлось создать собственную строку подключения, которая в основном соответствует исходному коду, поэтому я не уверен, почему он не работает из файла app.config.Может быть, в программе есть ошибка, которая будет исправлена ​​при следующем запуске?Надеюсь, что так оно или есть, или я сделал что-то не так, загадка.

...