EF6 - Run Update-Database Command without seeds
.net, c#, database-migration, entity-framework, migration
Solution
From the source code of `DbMigrationsConfiguration<TContext>`:
/// <summary>
/// Runs after upgrading to the latest migration to allow seed data to be updated.
///
/// </summary>
///
/// <remarks>
/// Note that the database may already contain seed data when this method runs. This means that
/// implementations of this method must check whether or not seed data is present and/or up-to-date
/// and then only make changes if necessary and in a non-destructive way. The
/// <see cref="M:System.Data.Entity.Migrations.DbSetMigrationsExtensions.AddOrUpdate``1(System.Data.Entity.IDbSet{``0},``0[])"/>
/// can be used to help with this, but for seeding large amounts of data it may be necessary to do less
/// granular checks if performance is an issue.
/// If the <see cref="T:System.Data.Entity.MigrateDatabaseToLatestVersion`2"/> database
/// initializer is being used, then this method will be called each time that the initializer runs.
/// If one of the <see cref="T:System.Data.Entity.DropCreateDatabaseAlways`1"/>, <see cref="T:System.Data.Entity.DropCreateDatabaseIfModelChanges`1"/>,
/// or <see cref="T:System.Data.Entity.CreateDatabaseIfNotExists`1"/> initializers is being used, then this method will not be
/// called and the Seed method defined in the initializer should be used instead.
///
/// </remarks>
/// <param name="context">Context to be used for updating seed data. </param>
Basically, you don't have another option than implement an "add or update" logic because the Seed method will be executed each time after the initializer is used.
The AddOrUpdate extension method is useful for this, but I have also used this in some cases:
if (!context.Entities.Any())
{
// Seed
}
Problem
I'm Using Entity Framework 6 and I'm using migrations. I have already created the database using an initial migration. Now I have done changes to the Model and the context has changed, and I want to update the database BUT... When I try to run again the `Database-Update` command the seeds are also running too, and this bring errores due some data is inserted again. So, how can I to run the `Update-Database` command WITHOUT running the seed method? It is hard to believe that EF doesn't have any simple option like `-No-Seed` for that. I'm almost secure that other ORMs does.