如何从自定义 NuGet 包运行 EF 迁移?

Posted

技术标签:

【中文标题】如何从自定义 NuGet 包运行 EF 迁移?【英文标题】:How do you run EF migrations from a custom NuGet package? 【发布时间】:2021-07-08 19:26:43 【问题描述】:

我有一个 c# 类库,它有自己的数据库上下文和实体框架迁移。

我的解决方案包含一个将类库作为项目参考引用的网站。

我可以通过将默认项目设置为我的类库并使用以下命令,从包管理器控制台为 Visual Studio 中的类库应用 EF 迁移:

update-database -StartupProject MyMainWebProj -Context MyClassLibDbContext

我为类库创建了一个私有 NuGet 包,并更新了网站以引用 NuGet 包而不是项目引用。

既然类库是通过 NuGet 包引用的,我无法弄清楚如何运行 EF 迁移。

【问题讨论】:

【参考方案1】:

您可以在服务配置期间使用 Use*() 方法的构建器对象,如下所述:https://github.com/jasontaylordev/CleanArchitecture/blob/d0f133ee026aec5cd5856c5592c307b5f20fa8e4/src/Infrastructure/DependencyInjection.cs#L28

services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(
        configuration.GetConnectionString("DefaultConnection"),
        b => b.MigrationsAssembly(typeof(SomeClassInTheOtherAssembly).Assembly.FullName)));

【讨论】:

非常感谢!我将上面的内容添加到我的网站的 Startup 类中,(即使网站中没有使用上下文 - 所以上下文实际上只是一个虚拟上下文,以便运行迁移)。现在我可以使用包管理器控制台中的标准“update-database”命令从 NuGet 库运行迁移。

以上是关于如何从自定义 NuGet 包运行 EF 迁移?的主要内容,如果未能解决你的问题,请参考以下文章

EF-使用迁移技术让程序自动更新数据库表结构

Kivy:如何从自定义 BoxLayout 显示 ScrollView?

赛普拉斯:如何从自定义命令中获取返回值? (柏树承诺)

EF Core 添加迁移构建失败

如何从 NuGet 安装 EntityFramework 5.0(和其他旧版本)?

EF 数据迁移