2017-01-31 1 views
0

J'ai une table avec un nombre fixe de lignes, 51 une pour chaque état américain plus DC. En plus de la colonne StateCode, il existe également des données par état. Mais le nombre de lignes ne changera pas.Seed est en train d'effacer les données existantes

StateCode DataColum1 DataColumn2 etc 

Lorsque le db est tête de série, je dois remplir la table avec les 51 lignes si elles n'existent pas. Mais s'ils le font, je dois laisser la table tranquille.

La façon dont je le fais actuellement efface toutes les données chaque fois que je fais un database-update.

context.StateLeadSettings.AddOrUpdate(s => s.StateCode, 
    new StateLeadSettings() { StateCode = "AK" }, 
    .... 
); 

Je ne sais pas comment changer cela il ajoute que si elles n'existent pas.

+0

Voici une [bonne ressource] (https://blog.oneunicorn.com/2013/05/28/database-initializer-and-migrations-seed-methods/) sur ce. Faites défiler jusqu'à la section "Entrer les migrations". – parameter

+0

Cela pourrait - [DropCreateDatabaseIfModelChanges ] (https://msdn.microsoft.com/en-us/library/gg679604 (v = vs.113) .aspx) - être le problème? –

Répondre

1

Essayez cette logique:

var stateLeadSettings = new List<StateLeadSettings>{ 
    new StateLeadSettings() { StateCode = "AK" }, 
    .... 
}; 
var codes = stateLeadSettings.Select(x => x.StateCode).ToList(); 
var existed = context.StateLeadSettings.Where(x => codes.Contains(x.StateCode)) 
       .Select(x => x.StateCode).ToList(); 
context.StateLeadSettings.AddRange(stateLeadSettings 
       .Where(x => !existed.Contains(x.StateCode)).ToList()); 
context.SaveChanges();