The DbMigrationsConfiguration.Seed method DbMigrationsConfiguration.Seed called every time you call Update-Database . The rationale for this is explained in this One Unicorn blog.
This means that you need to write your Seed code to handle existing data. If you do not like this, you can vote for the CodePlex change.
In the meantime, to quote the blog:
The best way to handle this is usually not to use AddOrUpdate for each object, but instead there should be a more intentional database for existing data using any suitable mechanisms. For example, a seed can check if one representative exists and then branches onto this result to either update everything or insert everything
Another option I've used in the past is to add persistent data related to the migration in the migration itself using the Sql command. Thus, it works only once. I tend to move away from this because I prefer to keep sowing in one place.
source share