📌  相关文章
📜  在程序集启用迁移中找不到上下文类型 - C# (1)

📅  最后修改于: 2023-12-03 14:51:30.904000             🧑  作者: Mango

在程序集启用迁移中找不到上下文类型 - C#

当你尝试在程序启动时使用 Entity Framework 数据库迁移时,你可能会遇到以下错误:

System.Data.Entity.Core.ProviderException: 'An exception occurred while initializing the database. See the InnerException for details. System.InvalidOperationException: Can not find DbContext type (ProjectName.ContextName) specified in the application configuration or passed in to DbContextInfo constructor.

这种错误通常是由于 EF 迁移工具无法找到你的上下文类型引起的。这可能是因为你没有在配置文件中正确指定你的上下文类型,或者是因为 EF 迁移工具无法识别上下文类型。

以下是一些检查可能导致这种错误的方法和解决方法:

确认配置文件中指定了 DbContext

首先,确认你在配置文件中正确地指定了 DbContext。在 Web.config 或 App.config 中,你需要指定 DbContext 的名称和程序集名称:

<connectionStrings>
  <add name="MyContext" connectionString="Data Source=(local); Initial Catalog=MyDatabase; Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
  
<entityFramework>
  <contexts>
    <context type="ProjectName.ContextName, AssemblyName">
      <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[ProjectName.ContextName, AssemblyName], EntityFramework">
        <parameters>
          <parameter value="MyContext"/>
        </parameters>
      </databaseInitializer>
    </context>
  </contexts>
</entityFramework>

确保你的 DbContext 类型名称和程序集名称正确,这样 EF 就可以找到你的上下文类型了。

使用 Enable-Migrations 命令显式指定上下文

如果你仍然无法让 EF 找到你的上下文类型,尝试使用 Enable-Migrations 命令显式指定上下文:

Enable-Migrations -ContextTypeName ProjectName.ContextName -MigrationsDirectory MigrationsFolder -Verbose

这个命令将启用迁移并在你的项目中创建 Migrations 文件夹。你需要手动更新迁移文件并更新数据库。

确认上下文类可见

如果你仍然收到 “找不到上下文类型” 的错误,可能是因为 EF 迁移工具无法访问你的上下文类。这可能是因为你的上下文类定义在一个不同的程序集中,或者是因为你的上下文类定义为内部类。

在这种情况下,你需要确保你的上下文类对 EF 迁移工具可见。你可以将上下文类定义为公共类,或在 EF 迁移工具项目中添加对你的上下文类项目的引用。

确认 EF 版本兼容

最后,如果你仍然无法启用迁移,你可能需要确认你的 EF 版本兼容。确保你的 EF 版本与你的应用程序兼容,并根据需要更新其版本。

希望这篇文章可以帮助你解决启用 EF 数据库迁移时遇到的问题。