突然,在实例化生成的ObjectContext类时,我一直得到一个MetadataException。App.Config中的连接字符串看起来是正确的-自从上次它工作以来没有改变-我已经尝试从底层数据库中重新生成一个没有变化的新模型(edmx-file)。

有人有什么想法吗?

进一步的细节:我没有更改任何属性,没有更改任何输出程序集的名称,也没有尝试将EDMX嵌入到程序集中。我只是下班后等了10个小时才回来。然后它就不管用了。

我试过重新创造EDMX。我试着重新创建这个项目。我甚至尝试从头开始重新创建数据库。不管怎样,运气不好。


当前回答

有同样的问题,我从数据库重新创建了edmx。 解决了我的问题。

其他回答

我在解决方案文件夹中包含项目的解决方案中遇到了同样的问题,当它们被移动到解决方案根目录时(为了克服Mvc3AppConverter由于项目位置而导致的疑似bug)。

尽管在需要时重新添加了所有*项目引用后编译了解决方案,但在网站启动时抛出了错误。

EDMX在其中一个被移动的项目(“Data”项目)中,但当然,缺少对Data项目的引用并不会导致编译错误,只是运行时错误。

简单地将缺少的引用添加到主项目就解决了这个问题,根本不需要编辑连接。

我希望这能帮助到其他人。

我也遇到了和Rick一样的问题和解决方案,只是我要将一个现有的.edmx导入到一个新项目中,虽然基本名称空间无关紧要,但它被导入到不同的子目录中,因此我还必须更新Web内部的连接字符串。配置在三个地方,包括不同的子目录命名:

这意味着应用程序无法加载EDMX。有几种情况会导致这种情况。

您可能已经将模型的MetadataArtifactProcessing属性更改为Copy to Output Directory。 连接字符串可能错误。我知道您说您没有更改它,但如果您更改了其他内容(例如,程序集的名称),它仍然可能是错误的。 您可能正在使用编译后任务将EDMX嵌入到程序集中,但由于某种原因该程序集中不再工作。

简而言之,你的问题中没有足够的细节来给出准确的答案,但希望这些想法能让你走上正确的轨道。

更新:我已经写了一篇博客文章,介绍了更完整的故障排除步骤。

有时包含模型的程序集不会被加载:

    [TestMethod]
    public void TestOpenWithConfigurationAfterExplicit()
    {
        String dummy = typeof(MallApp).Assembly.FullName;  
        //force the assembly loaded.
        using (DbContext ctx = new DbContext("name=MyContainer))
        {
        }
    }

MallApp类型位于与实体模型相同的程序集中。如果没有显式加载,则会抛出System.Data.MetadataException。

对于所有SelftrackingEntities用户, 如果您已经遵循Microsoft演练并将Object上下文类分离为 WCF服务项目(通过链接到上下文.tt)所以这个答案是给你的:

这篇文章中显示的部分答案包括如下代码:

... = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName); 

对你没用!!原因是youobjectcontexttype。程序集现在驻留在不同的程序集(在wcf项目程序集内),

你应该用——>替换youobjectcontexttype。assembly。fullname

ClassTypeThatResidesInEdmProject.Assembly.FullName 

玩得开心。