【问题标题】:MVC Entity Framework connection string references other projectMVC 实体框架连接字符串引用其他项目
【发布时间】:2012-03-26 16:25:06
【问题描述】:

我正在为 Microsoft MVC 应用程序执行模型优先方法。该解决方案名为“TutorialPile”,分为两个项目,Domain 和 WebUI。我尝试将 Tutorial 对象的控制器添加到 WebUI 项目中,并选择域类和 DB 上下文。但是,我收到错误消息“无法检索 TutorialPile.Tutorial 的元数据。无法加载指定的元数据资源。”

在网上查了一下,好像在 web.config 文件的连接字符串中找不到 edmx 对象。我从域项目的 app.config 文件中复制了连接字符串,但它仍然不起作用。以下是 web.config 文件中的连接字符串。

<add name="ApplicationServices"         connectionString="data   source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />
<add name="TutorialPileModelContainer"  connectionString="metadata=res://*/Models.TutorialPileModel.csdl|res://*/Models.TutorialPileModel.ssdl|res://*/Models.TutorialPileModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLEXPRESS;initial catalog=TutorialPileDB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
<add name="TutorialPileDbContext"       connectionString="metadata=res://*/Models.TutorialPileModel.csdl|res://*/Models.TutorialPileModel.ssdl|res://*/Models.TutorialPileModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLEXPRESS;initial catalog=TutorialPileDB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

这是我复制的连接字符串。

<add name="TutorialPileDBEntities"      connectionString="metadata=res://*/TutorialPile.csdl|res://*/TutorialPile.ssdl|res://*/TutorialPile.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\sqlexpress;initial catalog=TutorialPileDB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

对我需要更改的内容有什么想法吗?

【问题讨论】:

    标签: asp.net-mvc entity-framework


    【解决方案1】:

    确保...

    1. edmx 文件的构建操作设置为 EntityDeploy(选择文件并转到属性窗口)。
    2. 您的 WebUI 项目引用了域项目
    3. 编辑 WebUI 项目上的连接字符串以引用其他项目的元数据。使用 * 意味着它可以来自任何 dll。但是,如果您的 edmx 文件位于文件夹中,则必须映射层次结构。

    例如:
    EDMX 路径: TutorialPile.Domain/Model/TutorialPile.edmx
    连接字符串: res://*/Model.TutorialPile .csdl|res://*/Model.TutorialPile.ssdl|res://*/Model.TutorialPile.msl

    更好:

    documentation 建议您使用程序集的全名(例如:AdventureWorks、1.0.0.0、中性、a14f3033def15840)来指定程序集(出于性能原因)。我无法让它工作。但是,只使用程序集的名称对我有用。因此,如果您的域项目输出 TutotialPile.Domain.dll,您可以使用:

    res://TutorialPile.Domain/Model.TutorialPile.csdl|res://TutorialPile.Domain/Model.TutorialPile.ssdl|res://TutorialPile.Domain/Model.TutorialPile.msl

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多