2015-12-02 114 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做不到這一點的情況下實例化,但它可以做到在啓動應用程序時。如果有任何未完成的遷移,它們將運行。

就是這樣。