【发布时间】:2017-04-12 14:49:48
【问题描述】:
我手动创建了一个类
public class AddClientsTable : DbMigration, IMigrationMetadata
{
string IMigrationMetadata.Id
{
get { return "201611281757258_AddClientsTable"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return "AddClientsTable-Migration"; }
}
public override void Up() {
CreateTable("Clients", t => new {
ClientId = t.Guid(name:"ClientId"),
Name = t.String()
})
.PrimaryKey( t => t.ClientId, "ClientId")
.Index( t => t.ClientId, "PK_Clients", true);
}
public override void Down() {
DropIndex("Clients", "PK_Clients");
DropTable("Clients");
}
}
我想通过代码优先迁移从代码应用它:
var migration = new AddClientsTable();
migration.Up();
context.RunMigration(migration);
这是我从here 偷来的,但是当我运行代码时,我得到了这个异常:
Unable to cast object of type 'System.Data.Entity.Migrations.Model.CreateIndexOperation' to type 'System.Data.Entity.Migrations.Model.HistoryOperation'.
HistoryOperation 是更新__MigrationHistory 表的操作?那么我该如何通过代码做到这一点?
我是否遗漏了什么或者 EntityFrameowrk Update-Database 命令比我知道的更多?
【问题讨论】:
-
你为什么又要通过代码来做呢?
-
好吧,我不使用visual studio(在我很旧的机器上太慢)执行Update-Database命令,我只是使用gvim进行代码编辑,我真的很想能够做到Code-First 数据库迁移就是这样。
-
你有powershell吗?实体框架的每个数据库函数都有 powershell 命令
-
是的,我在 Windows 上,我确实有 powershell,但是需要在代码中执行它的原因是我需要在我的用户机器上应用相同的迁移,所以它会是更容易迁移他们的本地数据库。
-
如果您想先使用代码执行所有新迁移,请尝试
MigrateDatabaseToLatestVersionmsdn.microsoft.com/en-us/library/…(此处为示例github.com/tym32167/arma3beclient/blob/master/src/…)
标签: c# entity-framework-6 dbmigrate