【问题标题】:Entity Framework Code First DbContext Checks the ConnectionString During Compile?Entity Framework Code First DbContext在编译期间检查ConnectionString?
【发布时间】:2011-09-29 13:44:07
【问题描述】:

似乎 Code First DbContext 在编译期间真的使用了给定的 ConnectionString?我什至不知道这怎么可能,但对我来说似乎是这样。如果我关闭本地 SQL Server,我会收到错误消息“无法获取 DbContext 类型的 MetadataWorkspace...”。打开 SQL Server,一切编译正常。

这是我的上下文的一部分(我正在使用现有的数据库,是的,我知道,实际上并不是首先编写代码)

public class MyContext : DbContext
{
    public MyContext() : base("MY_DYNAMIC_CONNECTIONSTRING")
    {
        Database.SetInitializer<MyContext>(null);
    }
    ...

如果真的是这样,那就有大问题了。我怎样才能防止它这样做?如果我使用连接字符串不起作用的单独构建机器怎么办?还是我做错了什么?有什么建议吗?

【问题讨论】:

  • 这是在 WCF RIA 服务项目中吗?我看到这个错误只在 RIA 服务+EF4.1 的上下文中提到。我认为它不会发生在“纯”EF 4.1 项目中。我刚刚关闭了我的 SQL Server,我仍然可以编译一个 EF 4.1 控制台项目。尽管如此,我也会对发生的事情感兴趣。

标签: entity-framework ef-code-first connection-string wcf-ria-services code-first


【解决方案1】:

WCF RIA 服务在设计时和构建时实例化 DbContext,而不仅仅是在运行时:

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

为了在您的 Silverlight 项目中生成代码,RIA 服务 必须在构建时检查您的 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 纠缠不清。)把它放在连接字符串中怎么样? blog.oneunicorn.com/2011/03/31/…
  • @Julie:哦,我根本不知道在 config 中设置初始化程序是可能的。很高兴知道。如果它解决了问题,您必须将您的评论转换为答案。但我想知道:如果 RIA 在设计时调用任何构造函数来实例化派生上下文,不应该是 default 构造函数 - 如问题所示 - 将初始化程序设置为 @987654326 @?奇怪的是,RIA 仍然尝试连接到数据库。
  • 好的,这里有很多很好的信息。如果您查看了 Jeff Handley 的博客文章,您可以看到他在 HttpContext 为空时将初始化程序设置为空,以防止 RIA 服务初始化上下文。我也这样做了,所以 RIA 不应该初始化它?也许你不能影响构建时初始化?
  • @Antti:我不知道。在两篇博客文章的 cmets 中,人们都抱怨同样的问题,但我在这些 cmets 中找不到真正的解决方案。在我的第二个链接中的评论下方某处,建议下载和使用 RIA SP2,并声称这将解决问题。但我看不到任何人证实这一点。您是否尝试过 Julie 将 config 中的初始化程序设置为 null 的想法?
  • Varun 还表示这可能不可行 (varunpuranik.wordpress.com/2011/06/29/…)。我还尝试使用 WCF RIA Services SP2 位,但没有成功。结论是构建 EF Code First + RIA 服务项目,您需要在构建期间工作的数据库。
【解决方案2】:

这是我用来追踪“无法获取 DbContext 类型‘{type}’的 MetadataWorkspace”错误的根本原因的方法:

http://joshmouch.wordpress.com/2011/11/09/failed-to-get-the-metadataworkspace-for-the-dbcontext-type-type/

我知道它没有专门回答您的问题,但它可以帮助其他在 Google 上搜索此错误消息的人。

【讨论】:

  • 感谢您的提示!我相信这在将来会派上用场。目前我已经放弃了 CodeFirst 方法并等待 vNext 看看情况是否有所改善。
  • 不错的选择。我什至后悔在当前版本中尝试 CodeFirst。对于简单的事情,这很好,但是开始进入给定样本之外的场景,你就是在自找麻烦。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 2016-07-29
  • 2012-05-15
相关资源
最近更新 更多