2017-08-04 85 views
4

我在一個Spike分支上玩EF轉移,一旦我得到我想要的,從零開始創建實際的開發分支(基於以前的分支它根本沒有任何DB或ORM相關代碼)。EF Migrations生成一個不存在數據的遷移文件

新的代碼

我有一個從的DbContext繼承與此DbSet上下文:

public DbSet<Warehouse> Warehouses { get; set; } 

和倉庫包含此:

public class Warehouse 
{ 
    public string Code { get; set; } 
    public string Name { get; set; } 
} 

遷移

如果我運行

add-migration Warehouse 

我得到了一個名爲201708040819010_Warehouse.cs文件,其中包含此:

public override void Up() 
{ 
    RenameTable(name: "dbo.Warehouses", newName: "Warehouse"); 
    DropPrimaryKey("dbo.Warehouse"); 
    AddColumn("dbo.Warehouse", "Code", c => c.String(nullable: false, maxLength: 128)); 
    AlterColumn("dbo.Warehouse", "Name", c => c.String(maxLength: 100)); 
    AddPrimaryKey("dbo.Warehouse", "Code"); 
    CreateIndex("dbo.Warehouse", "Name", unique: true); 
    DropColumn("dbo.Warehouse", "Id"); 
    DropColumn("dbo.Warehouse", "Abbreviation"); 
    DropTable("dbo.People"); 
} 

這是不是在所有我所期待的。

什麼是錯

所有這些重命名,更改列和刪除列似乎表明,在某種程度上遷移確信,它需要在現有的數據庫更新現有的表。

但事實並非如此,因爲我刪除了舊的localdb,正在研究一個全新的分支和新的遷移。

沒有完全脫離藍色

的,但我卻擁有倉庫類(在穗分支玩耍時),包含一個ID,名稱和縮寫。

但這是舊消息。並沒有物理存在了。

我懷疑是怎麼回事

是Visual Studio中被絆倒本身就是立足存儲在它的臨時文件夾的信息,新的遷移。我根據this post做了一個看起來可能相關的清理,但沒有產生積極影響。

更新

的DbContext

public class MyDbContext : DbContext, IMyDbContext 
{ 
    public MyDbContext() 
     :base("MyDb") 
    { 
     Configuration.LazyLoadingEnabled = false; 
     Database.SetInitializer(new NullDatabaseInitializer<MyDbContext>()); 
    } 

    public DbSet<Warehouse> Warehouses { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations 
      .AddFromAssembly(Assembly.GetExecutingAssembly()); 

     modelBuilder.Conventions 
      .AddFromAssembly(Assembly.GetExecutingAssembly()); 
    } 
} 

EF遷移配置

internal sealed class Configuration : DbMigrationsConfiguration<MyDbContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
    } 

    protected override void Seed(MyDbContext context) 
    { 
    } 
} 

問題

我該怎麼辦才能解決這個(奇怪的)行爲?

+0

您是否針對另一個數據庫生成遷移?由於生成遷移的數據存儲在數據庫內部的遷移歷史記錄表中的self。 – Darren

+1

@Darren:這是相同的連接字符串,指向我之前刪除的localdb。 (我嘗試選擇不同的目錄名稱,沒有區別) – Spikee

+1

您可以發佈您的DbContext類和您的EF遷移配置。 – Darren

回答

2

我找到了。原因是這樣的:

enter image description here

之前我沒有,因爲你只看到它時,你update-database使用-verbose注意到這一點。除非有什麼不工作(如現在),否則我不這樣做。

而這背後的原因是,要運行,你需要有一個啓動項目,在我的情況下是我的REST API。由於它沒有連接字符串(但有意),而不是給出錯誤,因此遷移假設我想使用.\SQLEXPRESS實例的

由於我沒有在我的Spike上提供連接字符串,我正在處理SQLEXPRESS時沒有注意到,現在正在檢查舊的表定義,導致這些重命名和刪除而不是乾淨的創建。

...相當(惱人的)假設。我會首選一個錯誤。

相關問題