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

4

我正在使用带有存储库模式的Entityframework,并使用数据库。当我尝试连接到数据库时,会出现以下错误:

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

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

我该如何修复这个问题?


你是否正在使用基于数据库的开发方法来进行Entity Framework的开发? - RBT
请验证您在 app.config 或 web.config 中的数据库连接字符串,具体取决于您创建的应用程序类型。它是否指向正确的数据库名称和 SQL Server 实例? - RBT
2个回答

6
如果你正在尝试连接一个已存在的数据库,但EF要进行代码优先,那么应该按照以下简单步骤来防止这种错误。
  1. 在web.config文件中删除当前的连接字符串。
  2. 找到.edmx文件并双击打开,如下图所示:enter image description here
  3. 如果点击“从数据库更新模型”后出现如下屏幕enter image description here,请确保标记上“在App.Config中保存连接设置”。
  4. 之后,如果.edmx文件在类库中,请将连接字符串复制到主项目中。
另一方面,如果您没有看到第4步的屏幕,请确保您已删除了项目中的所有连接字符串。

0
对我来说,问题在于 OnModelCreating 方法本身。所以,我只是从我的继承自 DbContext 的 DB Model 类中移除了这个方法,然后一切都正常工作了。我猜它使用基类的方法而不是用异常抛出覆盖它。
我在谷歌上查找了一下,发现这个方法通常用于将表映射到模型,并且其结果保存在缓存中,如果你禁用了缓存,它会被重复调用。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    throw new UnintentionalCodeFirstException();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接