System.Data.Entity.Infrastructure.UnintentionalCodeFirstException未被用户代码处理HResult = -2146233079

时间:2016-06-03 10:10:00

标签: c# entity-framework

我正在使用Entityframework和使用数据库的存储库模式。我尝试连接数据库时收到以下错误

  

System.Data.Entity.Infrastructure.UnintentionalCodeFirstException未被用户代码处理     的HResult = -2146233079

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    throw new UnintentionalCodeFirstException();
}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

如果您尝试连接到现有数据库但EF尝试先执行代码,则应按照这个简单的步骤来防止此错误。

  1. 删除web.config中的当前连接字符串
  2. 找到您的.edmx文件,然后双击下一张图片中的显示方式。 InnerException
  3. 如果在点击“从数据库更新模型...”后看到此屏幕 enter image description here 确保标记为“将App.Config中的连接设置保存为”
  4. 之后,如果您的.edmx文件位于类库中,则应将连接字符串复制到主项目中。
  5. 另一方面,如果您没有看到第4步的屏幕,请确保已删除项目的所有连接字符串。

答案 1 :(得分:0)

对我来说,问题在于它本身是 OnModelCreating 方法。因此,我只是从继承了 DbContext 形式的DB Model类中删除了此方法,并且一切正常。我猜它使用了基类的方法,而不是使用异常抛出来覆盖它。

我在Google上浏览了一下,发现该方法通常被调用一次,以将表映射到模型,其结果保存在Cache中,如果禁用了cache,则会重复调用此方法。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    throw new UnintentionalCodeFirstException();
}