似乎Code First DbContext在编译期间确实使用了给定的ConnectionString?我甚至不知道这是怎么可能的,但对我来说似乎是这样。如果我关闭我的本地SQL Server,我收到错误,指出“无法获取DbContext类型的MetadataWorkspace ...”。打开SQL Server,一切都编译好了。
这是我的上下文的一部分(我使用的是现有的数据库,是的,我知道,实际上并不是第一个代码)
public class MyContext : DbContext
{
public MyContext() : base("MY_DYNAMIC_CONNECTIONSTRING")
{
Database.SetInitializer<MyContext>(null);
}
...
如果确实如此,那就是一个很大的问题。我怎么能阻止它呢?如果我使用ConnectionString不起作用的单独构建机器怎么办?或者我做错了什么?有什么建议吗?
答案 0 :(得分:6)
WCF RIA Services在设计时和构建时实例化DbContext
,不仅仅是在运行时:
引自http://jeffhandley.com/archive/2011/06/30/RIAServicesCodeFirst.aspx:
为了在Silverlight项目中生成代码,RIA Services 必须在构建时检查您的DbContext以获取实体 可用的类型。
EF CodeFirst独立与RIA服务之间的区别 是我们在设计时初始化一个新的DbContext。
如果连接字符串无效或无法建立连接,则显然会出现您提到的异常。
答案 1 :(得分:1)
以下是我用来跟踪“无法获取DbContext类型'{type}'的元数据工作空间”的根本原因的错误:
我知道它没有具体回答您的问题,但它可以帮助其他搜索Google的错误消息。