Alf*_*ñoz 5 entity-framework code-first ef-migrations
我创建了一个包含在主MVC3 Web应用程序中的模块。该模块打包成NuGet软件包,可以通过NuGet进行安装和卸载。主站点和模块都使用Code First,EF> = 4.3
要创建程序包,我有另一个MVC3站点,并且所有功能都在一个区域内,因此,要创建程序包,我只需要打包库,视图和所有需要的文件。数据库迁移在项目中工作正常,并且程序包创建良好。
现在,我通过NuGet将软件包安装在主站点中。该站点位于另一个解决方案中,该解决方案有两个项目:
软件包已正确安装,并且Area,Area视图和库已正确安装。
现在的问题是我如何更新数据库?我首先尝试运行“ Update-Database”,但收到消息:
“在程序集'MyProject.Web.UI'中未找到迁移配置类型。(在Visual Studio中,您可以使用程序包管理器控制台中的Enable-Migrations命令来添加迁移配置)。”
然后,我尝试通过“ Enable-Migrations”启用迁移,但又收到了另一条消息:
“在程序集'MyProject.Web.UI'中找不到上下文类型。”
我也尝试仅运行该站点,看看是否自动应用了更改,但出现了带有典型消息的异常页面:
“自创建数据库以来,支持'NugetPackageDbContext'上下文的模型已更改。请考虑使用代码优先迁移来更新数据库”
我不知道要怎么做才能通过NuGet软件包中的迁移所需的更改来更新数据库。任何人都可以在这件事上说明一下吗?我对Migrations还是很陌生,如果有更改而不是在控制台中运行命令,也许有一些配置可以更新数据库,我有点迷失了。
提前致谢 :)
好消息!看来我明白了。我正在寻找一种方法使NuGet包将数据库更新到最新版本。
好吧,这个包附带了一个管理控制器,所以我添加了一个名为“更新”的新操作:
public ActionResult Update()
{
System.Data.Entity.Database.SetInitializer(new System.Data.Entity.MigrateDatabaseToLatestVersion<MyPackageDbContext, MyPackage.Migrations.Configuration>());
return View();
}
Run Code Online (Sandbox Code Playgroud)
在我的迁移配置类中,我有:
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
Run Code Online (Sandbox Code Playgroud)
我不得不说,在我做这一切的过程中,我发现了一些奇怪的行为。让我惊讶的一件事是,我不知道这是否正常,请阅读以下内容:
您必须注意的一件事是 Configuration 类是内部的,但因为这是一个模块,所以我需要可以从另一个程序集访问。我试图将其公开,但我收到了一些奇怪的警告/错误,我不知道它们是否相关。所以最后我把它保留在内部但使用了
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("OtherAssembly")]
Run Code Online (Sandbox Code Playgroud)
我在 Visual Studio 中发现了一些奇怪的行为,包括 NuGet 包、CF、迁移等所有这些东西……我不知道这些东西是否是错误,但所有这些事情花了我整整两个工作日。
我希望它对任何其他想要创建可更新的 CF NuGet 包的人有用。
| 归档时间: |
|
| 查看次数: |
6592 次 |
| 最近记录: |