1

我的 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。

任何帮助表示赞赏。

谢谢

4

2 回答 2

0

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

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

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

  1. 在解决方案资源管理器中双击 .edmx 文件。
  2. 该文件在实体设计器中打开。
  3. 右键单击设计图面的空白部分并选择属性。
  4. 出现 Visual Studio 属性窗口。
  5. 将元数据工件处理属性的值设置为复制到输出目录。

http://msdn.microsoft.com/en-us/library/vstudio/cc716709(v=vs.100).aspx

我认为 VS 被解决方案中的多个项目与同一个数据库的多个连接弄糊涂了。上述修复为我解决了它并修复了我损坏的项目。

于 2014-03-31T20:50:11.443 回答
0

这可能无济于事,但它应该弄清楚元数据资源如何与引用的程序集一起工作。

我遇到了同样的问题,在阅读了 JimMat 对原始问题的评论和一些反复试验后,我了解到 Entity 对元数据字符串中的限定名称很挑剔。

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

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

示例:如果我的 DbContext 位于名为“Data”的项目/程序集中,其完全限定名称为“Data.Staging.Context”,我的元数据将类似于

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

或者,根据 JimMat 的说法:

metadata=res://Data/Staging.Context.csdl|res://Data/Staging.Context.ssdl|...
于 2017-10-16T20:01:41.090 回答