没有 nuget 包的添加迁移可能吗?

Add-Migration without nuget package possible?

尝试使用 Entity Framework 7 RC1,我看到 nuget 包包含一个 gazillon 文件(实际上是 171 个文件,130 个文件夹),我不想检查我的源代码管理。

我正在尝试采用最少的方法,只使用和签入我使用的东西。所以我能够将 dll 的使用减少到 3 个 dll Core, Relational and Sqlite.

所以主要的 EF 东西将与这些一起工作,一切都很好。但是,现在我想要迁移,所以我必须重新获取带有大量 dll/脚本的 nuget 包,只是 运行 "Add Migration".

简而言之,如何手动添加迁移,由于我的项目很小,我是唯一的开发人员,数据库更改将是基本的并由我控制,我可以自己编写,但它会起作用吗?迁移文件的格式/结构是什么?

请不要回答 "why do you not want to use nuget" 或 "nuget is the future" 或类似的东西。

幸运的是@Claies 是不正确的。我可以在没有 Nuget 的情况下使用迁移。我算出来了,不难

需要组件

需要 18 个程序集(因为在 6.1 之后它们都被拆分成更加模块化的方式)。这些可以从可下载的 Nuget 包中提取。

EntityFramework.Relational, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
EntityFramework.Core, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
EntityFramework.Sqlite, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
System.Interactive.Async, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.Extensions.Logging.Abstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
Remotion.Linq, Version=2.0.0.0, Culture=neutral, PublicKeyToken=fee00910d6e5f53b
System.Diagnostics.DiagnosticSource, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
Microsoft.Extensions.DependencyInjection.Abstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
Microsoft.Extensions.DependencyInjection, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
Microsoft.Extensions.Caching.Abstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
Microsoft.Extensions.OptionsModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
Microsoft.Extensions.Logging, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
Microsoft.Extensions.Caching.Memory, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
Microsoft.Data.Sqlite, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
Microsoft.Extensions.Primitives, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
Microsoft.Extensions.Configuration.Abstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
Microsoft.Extensions.Configuration.Binder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
Microsoft.Extensions.PlatformAbstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60

__EFMigrations Table:

无需担心这一点,因为 EF 程序集会负责创建这个

迁移脚本

Nuget "Add-Migration" 命令添加了 3 个文件(迁移 .cs,设计器 .cs 和快照),但实际上我发现迁移只需要一个。

首先创建一个名为"Migrations"的目录。然后在其中放置具有这种结构的.cs文件:

[DbContext(typeof(BloggingContext))]
[Migration("151205_01")]
public class InitialMigration : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder) 
    {
        // create table, add columns / keys etc.
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        // opposite of "Up", ie. drop table
    }

    protected override void BuildTargetModel(ModelBuilder modelBuilder)
    {
        // can remain blank, not sure what its used for
    }
}

我认为最好将这些文件命名为 "yyMMdd-rr",其中 r = 修订版,这样它们总是按顺序排序,运行 按顺序排序。

如何应用迁移

只需致电:

using(var db = new MyContext())
{
    db.Database.Migrate();
}

EF 7 无法在上下文实例化时执行此操作,但可以在启动应用程序时执行此操作。如果有任何待处理的迁移,它们将是 运行.

就是这样。