实体框架代码第一个DbContext在编译期间检查ConnectionString?

Ant*_*nen 5 entity-framework connection-string code-first wcf-ria-services ef-code-first

似乎Code First DbContext在编译期间真的使用了给定的ConnectionString吗?我甚至不知道这是怎么可能的,但对我来说似乎是这样.如果我关闭我的本地SQL Server,我收到错误,指出"无法获取DbContext类型的MetadataWorkspace ...".打开SQL Server,一切都编译好了.

这是我的上下文的一部分(我使用的是现有的数据库,是的,我知道,实际上并不是第一个代码)

public class MyContext : DbContext
{
    public MyContext() : base("MY_DYNAMIC_CONNECTIONSTRING")
    {
        Database.SetInitializer<MyContext>(null);
    }
    ...
Run Code Online (Sandbox Code Playgroud)

如果确实如此,那就是一个很大的问题.我怎么能阻止它呢?如果我使用ConnectionString不起作用的单独构建机器怎么办?或者我做错了什么?有什么建议?

Sla*_*uma 6

WCF RIA Services DbContext不仅在运行时实例化设计时和构建时间:

引自http://jeffhandley.com/archive/2011/06/30/RIAServicesCodeFirst.aspx:

为了在Silverlight项目中生成代码,RIA Services必须在构建时检查您的DbContext,以获取可用的实体类型.

引自http://varunpuranik.wordpress.com/2011/06/29/wcf-ria-services-support-for-ef-4-1-and-ef-code-first/#comment-102

EF CodeFirst独立和RIA服务之间的区别在于我们在设计时也初始化了一个新的DbContext.

如果连接字符串无效或无法建立连接,则显然会得到您提到的异常.

  • 要添加到Slauma的答案中,您需要在初始化程序设置RIA将在设计时检测到它.(我还没有和CF + RIA纠缠在一起.)把它放在连接字符串中怎么样?http://blog.oneunicorn.com/2011/03/31/configuring-database-initializers-in-a-config-file/ (2认同)