gpt4 book ai didi

entity-framework - 无法从主应用程序执行自定义 NuGet 包的代码优先迁移

转载 作者:行者123 更新时间:2023-12-04 20:49:27 25 4
gpt4 key购买 nike

我创建了一个要包含在主 MVC3 Web 应用程序中的模块。该模块被打包成一个 NuGet 包,可以通过 NuGet 安装和卸载。主站点和模块都使用 Code First,EF >= 4.3

要创建包,我有另一个 MVC3 站点,所有功能都在一个区域内,所以要创建包,我只需打包库、 View 和所有需要的文件。数据库迁移在项目中运行良好,并且包创建得很好。

现在我通过 NuGet 在主站点安装包。该站点在另一个解决方案中,该解决方案有两个项目:

  • MyProject.Web.UI:这是一个 Mvc3 项目
  • MyProject.EntityFramework:这是一个包含所有模型的类库,dbContext for MyProject...

  • 包已正确安装,并且区域、区域 View 和库已正确安装。

    现在的问题是我如何更新数据库?我首先尝试运行“Update-Database”,但收到以下消息:

    "No migrations configuration type was found in the assembly 'MyProject.Web.UI'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration)."



    然后我尝试使用“Enable-Migrations”启用迁移,但我收到了另一条消息:

    "No context type was found in the assembly 'MyProject.Web.UI'."



    我还尝试运行该站点并查看是否自动应用更改,但我得到带有典型消息的异常页面:

    "The model backing the 'NugetPackageDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database"



    我不知道如何使用 NuGet 包中的迁移所需的更改来更新数据库。任何人都可以在这件事上有所启发吗?我对迁移很陌生,如果有更改而不是在控制台中运行命令,也许有一些配置可以更新数据库,我有点迷茫。

    提前致谢 :)

    最佳答案

    好消息!看来我明白了。我正在寻找一种方法来制作 NuGet 包以将数据库更新到最新版本。

    好吧,这个包带有一个管理 Controller ,所以我添加了一个名为更新的新操作:

    public ActionResult Update()
    {
    System.Data.Entity.Database.SetInitializer(new System.Data.Entity.MigrateDatabaseToLatestVersion<MyPackageDbContext, MyPackage.Migrations.Configuration>());
    return View();
    }

    在我的迁移配置类中,我有:
    public Configuration()
    {
    AutomaticMigrationsEnabled = true;
    }

    我不得不说,在我做这一切的过程中,我发现了一些奇怪的行为。令我惊讶的一件事是,我不知道这是否正常,请阅读以下内容:
  • 安装了新迁移的软件包,但数据库不是最新的。因此,如果我访问受此影响的 EF,我会得到关于此的异常。到此为止。
  • 我去我的行动/MyPackage/Admin/Update 并运行它。显然它运行。我去数据库,我没有看到变化。甚至迁移表也没有新行。
  • 我再次访问之前显示异常的 EF 部分(第 1 点),然后一切正常,数据库更新,迁移表显示新行。

  • 您必须注意的一件事是 Configuration 类是内部的,但是因为这是一个模块,所以我需要从另一个程序集中访问它。我试图将其公开,但我收到了一些奇怪的警告/错误,我不知道它们是否相关。所以最后我把它保留在内部但使用了
    [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("OtherAssembly")]

    我在 Visual Studio 中发现了一些奇怪的行为,包括 NuGet 包、CF、迁移等所有这些东西……我不知道这些东西是否是错误,但所有这些东西花了我整整两个工作日。

    我希望它对任何其他想要创建可更新的 CF NuGet 包的人有用。

    关于entity-framework - 无法从主应用程序执行自定义 NuGet 包的代码优先迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12624917/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com