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

有人有什么想法吗?

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

我试过重新创造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。

其他回答

我遇到了同样的错误消息的问题。我的问题通过关闭并重新打开Visual Studio 2010解决了。

我也犯过类似的错误。我重新创建了项目(说来话长),并从旧项目中提取了所有内容。我没有意识到我的模型之前在一个名为“模型”的目录中,而现在在一个名为“模型”的目录中。一旦我改变了我的网络连接。配置如下:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Model.Recipe.csdl 

:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Models.Recipe.csdl

一切正常(模型改为模型)。注意,我必须改变字符串中的这三个位置。

我花了一整天在这个错误上

如果您正在使用n-tear架构

或者您尝试将EDMX生成的模型从DataAccessLayer分离到DomainModelLayer

也许你会得到这个错误

第一个故障排除步骤是确保webconfig (UILayer)和appconfig (DataAccessLayer)中的Connection字符串是相同的 第二个是非常重要的连接字符串 connectionString = "元数据= res: / / * / Model.csdl | res: / / * / Model.ssdl | res: / / * / Model.msl;提供… 这就是问题所在

从哪里我得到了Modelor。csdl在我的连接字符串中,他们在哪里

这是我们的解决方案,请看图

希望对你有所帮助

异常是因为编译器指向不存在的元数据,所以只是复制app.config连接字符串到Web。配置ConnectionString

一个小小的修改帮我解决了这个问题。

我有3个项目参考资料的解决方案:

connectionString="metadata=res://*/Model.Project.csdl|res://*/Model.Project.ssdl|res://*/Model.Project.msl;

我改为:

connectionString="metadata=res://*/;