代码优先迁移尝试重新创建整个数据库而不是更新更改
Code First Migration tries to re-create enitre db instead of updating changes
我尝试先使用代码启用迁移,但我遇到了一些问题。
我在一个 mvc5 网站上工作,我有一个带有数据层的 dll,一个带有域 类 的 dll,然后是网站本身。
我已经 运行 网站并且所有表格都已创建。现在,我更改了域 类 之一上的单个 属性 的名称,并想更新数据库。但相反,它试图再次创造一切!
我更改了 属性,在控制台中输入 add-migration,然后创建了迁移文件,但它包含我所有 类 的 CreateTable,而不仅仅是那个 table/class 的更改。
我已经使用控制台启用迁移,所以应该是有序的。它在我的网站项目中创建了 Migration 文件夹和 Configuration.cs 文件。
我的代码如下所示:
internal sealed class Configuration :DbMigrationsConfiguration<Playground.Web.Models.ApplicationDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = false;
}
protected override void Seed(Playground.Web.Models.ApplicationDbContext context)
{
// This method will be called after migrating to the latest version.
// You can use the DbSet<T>.AddOrUpdate() helper extension method
// to avoid creating duplicate seed data. E.g.
//
// context.People.AddOrUpdate(
// p => p.FullName,
// new Person { FullName = "Andrew Peters" },
// new Person { FullName = "Brice Lambson" },
// new Person { FullName = "Rowan Miller" }
// );
//
}
}
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("PlaygroundContext", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
首次配置迁移时,您需要添加基线迁移。如果您有现有表,则需要告诉 EF 进行无操作迁移:
Add-Migration InitialCreate –IgnoreChanges
现在,未来的迁移将基于基线进行增量迁移。 https://msdn.microsoft.com/en-us/data/dn579398.aspx#option1
我尝试先使用代码启用迁移,但我遇到了一些问题。 我在一个 mvc5 网站上工作,我有一个带有数据层的 dll,一个带有域 类 的 dll,然后是网站本身。 我已经 运行 网站并且所有表格都已创建。现在,我更改了域 类 之一上的单个 属性 的名称,并想更新数据库。但相反,它试图再次创造一切! 我更改了 属性,在控制台中输入 add-migration,然后创建了迁移文件,但它包含我所有 类 的 CreateTable,而不仅仅是那个 table/class 的更改。 我已经使用控制台启用迁移,所以应该是有序的。它在我的网站项目中创建了 Migration 文件夹和 Configuration.cs 文件。
我的代码如下所示:
internal sealed class Configuration :DbMigrationsConfiguration<Playground.Web.Models.ApplicationDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = false;
}
protected override void Seed(Playground.Web.Models.ApplicationDbContext context)
{
// This method will be called after migrating to the latest version.
// You can use the DbSet<T>.AddOrUpdate() helper extension method
// to avoid creating duplicate seed data. E.g.
//
// context.People.AddOrUpdate(
// p => p.FullName,
// new Person { FullName = "Andrew Peters" },
// new Person { FullName = "Brice Lambson" },
// new Person { FullName = "Rowan Miller" }
// );
//
}
}
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("PlaygroundContext", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
首次配置迁移时,您需要添加基线迁移。如果您有现有表,则需要告诉 EF 进行无操作迁移:
Add-Migration InitialCreate –IgnoreChanges
现在,未来的迁移将基于基线进行增量迁移。 https://msdn.microsoft.com/en-us/data/dn579398.aspx#option1