当我尝试使用我的模型容器时,我遇到了这个错误:
在。中找不到名为'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="
Data Source=C:\Documents and Settings\Jon\My Documents\Visual
Studio 2010\Projects\SpreadsheetAddIn
\SpreadsheetAddIn\bin\Debug\PFData.sdf;
Password=password""
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="
Data Source=C:\Documents and Settings\Jon\My Documents\Visual Studio 2010\Projects\SpreadsheetAddIn\PFDatabase\bin\Debug\PFData.sdf;
Password=password""
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="
Data Source=|DataDirectory|\bin\Debug\PFData.sdf;
Password=password""
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...]
库: [......相同的修改......]
答案 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="
Data Source=C:\Documents and Settings\Jon\My Documents\Visual
Studio 2010\Projects\SpreadsheetAddIn
\SpreadsheetAddIn\bin\Debug\PFData.sdf;
Password=password""
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文件中运行。也许程序中有一个错误会在下一次修复中修复?希望就是这样,无论是我做错了什么,都是神秘的。