我在一個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)
{
}
}
問題
我該怎麼辦才能解決這個(奇怪的)行爲?
您是否針對另一個數據庫生成遷移?由於生成遷移的數據存儲在數據庫內部的遷移歷史記錄表中的self。 – Darren
@Darren:這是相同的連接字符串,指向我之前刪除的localdb。 (我嘗試選擇不同的目錄名稱,沒有區別) – Spikee
您可以發佈您的DbContext類和您的EF遷移配置。 – Darren