实体SQLCE无法在app.config文件中找到连接字符串

时间:2011-09-21 00:29:39

标签: vb.net linq entity-framework entity-framework-4.1 sql-server-ce

当我尝试使用我的模型容器时,我遇到了这个错误:

  

在。中找不到名为'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

我认为答案与happened to this guy类似。但不幸的是,他的解决方案并不适用于我的。

更新

我注意到在我点击此代码之前没有捕获到错误。当我在第三行执行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 主要项目: - &gt; 默认创建

<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 主要项目: - &gt; 用PFDatabase替换*

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

库: [......相同的修改......]

3 主要项目: - &gt;将res:// * /替换为。\

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

库: [......相同的修改......]

4 主要项目: - &gt;将res:// * /替换为〜\

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

库: [......相同的修改......]

2 个答案:

答案 0 :(得分:2)

如果要将edmx模型放在单独的类库中,请将app.config添加到该类库,并将连接字符串添加到该配置中。

此外,如果您的datamodel位于命名空间内,那么您必须在资源路径中包含完整的命名空间:

例如,如果您将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" />

答案 1 :(得分:0)

从专家那里获得了一些帮助。结束了解决(不知道为什么它不能正常工作),因为我使用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文件中运行。也许程序中有一个错误会在下一次修复中修复?希望就是这样,无论是我做错了什么,都是神秘的。