2015-12-02 115 views
1

试图使用Entity Framework 7 RC1,我看到nuget软件包包含一个gazillon文件(实际上是171个文件,130个文件夹),我不想检查到我的源代码管理。没有nuget包的添加迁移可能吗?

我想去最小的方法和使用,并只检查我使用的东西。所以我能够将dll使用率降至3 dll Core, Relational and Sqlite

所以主要的EF东西将与这些工作,并且一切都很好。但是,现在我想迁移,所以我必须重新获得nuget包才能运行"Add Migration"。因为我的项目很小,我是唯一的开发者,数据库的更改将基本完全由我控制,我可以自己编写它,但它会工作?以及迁移文件的格式/结构是什么?

请不要回答“为什么你不想使用nuget”或“nuget是未来”或类似的东西。

+1

默认情况下,NuGet文件存储在项目文件夹之外的“packages”目录中,以便它们不必检入源代码管理;如果packages目录在您第一次构建时不在机器上,那么NuGet将下载相应的软件包,因此不用于保存源代码管理检查是不成问题的。 – Claies

+0

@Craies怎么样,我不希望它在部署时下载nuget包,或者在互联网上有任何参考。 – sprocket12

+0

那么你不能使用迁移。迁移过程是一个非常复杂的过程,用于检查数据库,模型,创建向上/向下方法的基本代码,管理__migrationHIstory表等等。尝试手动完成此操作将非常容易出错,并且在此时只需使用SQL Management Studio创建你想要的表就会更好。 – Claies

回答

0

幸运@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表:

无需担心这一点,因为EF组件负责创建这个

迁移脚本

的NuGet “添加迁移” 命令将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做不到这一点的情况下实例化,但它可以做到在启动应用程序时。如果有任何未完成的迁移,它们将运行。

就是这样。