使用EntityDataSource - Entity Framework时无法加载指定的元数据源

时间:2012-02-09 01:33:41

标签: dll entity-framework-4 reference entitydatasource entity-model

我的MyModel.edmx位于程序集DataAccess.dll中。我的Web项目(C#)

中引用了此程序集

我的实体连接字符串是问题。

这是我从app.config复制到我的win.config:

<add name="MyModelEntities" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=xxx;initial catalog=xxx;persist security info=True;user id=xxx;password=xxx;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

问题是我收到无法加载元数据源的错误。

我确信我的型号名称是正确的。我用Reflector检查了dll。

所以,我想我应该把我的dll包含在连接字符串中,我试过这个

<add name="MyModelEntities" connectionString="metadata=res://DataAccess.dll/MyModel.csdl|res://DataAccess.dll/MyModel.ssdl|res://DataAccess.dll/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=xxx;initial catalog=xxx;persist security info=True;user id=xxx;password=xxx;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

但是我收到的错误是无法在程序集枚举列表中找到DataAccess.dll

有没有办法直接在dll中引用我的模型。 我的dll并没有强烈命名为dll。

感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:0)

我有与bobetko类似的经历,使用Entity Framework 5重新创建项目和数据库并使其工作一段时间。 (VS 2013 Express和SQL Server 2008 R2)

然后,我这样做了,它解决了我所有的问题......

将模型和映射文件复制到输出目录

  1. 在解决方案资源管理器中双击.edmx文件。
  2. 该文件在实体设计器中打开。
  3. 右键单击设计图面的空白部分,然后选择 属性。
  4. 将出现“Visual Studio属性”窗口。
  5. 将“元数据工件处理”属性的值设置为“复制” 输出目录。
  6. http://msdn.microsoft.com/en-us/library/vstudio/cc716709(v=vs.100).aspx

    我认为VS会被解决方案中的多个项目与同一个数据库的多个连接混淆。上面的解决方案为我解决了这个问题并修复了我破碎的项目。

答案 1 :(得分:0)

这可能没什么用,但是应该清楚一些元数据资源如何与引用的程序集一起工作。

我遇到了同样的问题,在阅读了JimMat对原始问题的评论以及相当多的反复试验之后,我了解到Entity在元数据字符串中对它的合格名称很挑剔。

确保元数据工件处理(如bluesky所述)设置为嵌入输出程序集,因为这会将csdl / ssdl / msl文件烘焙到该程序集的DLL,并被复制到引用项目的bin目录中。重建解决方案。

  • res:// - 告诉实体查看项目的嵌入资源,而不是磁盘上文件的路径
  • ... // * / ... - 使用WildCard作为程序集名称
  • ... / Namespace.Of.MyModel.csdl - 资源的完全限定名称,省略程序集名称

示例:如果我的DbContext位于名为&#34; Data&#34;的项目/程序集中。使用完全限定名称&#34; Data.Staging.Context,&#34;我的元数据看起来像

metadata=res://*/Staging.Context.csdl|res://*/Staging.Context.ssdl|...

或者,据JimMat说:

metadata=res://Data/Staging.Context.csdl|res://Data/Staging.Context.ssdl|...