Fonction cadre de l'entité de semences n'a pas introduit toutes les données à la base de données
-
25-10-2019 - |
Question
J'ai une classe qui hérite de DropCreateDatabaseIfModelChanges.
public class SetupData : DropCreateDatabaseIfModelChanges<CyclingClubContext>
{
protected override void Seed(CyclingClubContext context)
{
var _CycleType = new List<CycleType>
{
new CycleType { Type = "Leisure Cycle Type A" },
new CycleType { Type = "Mountain Bike Type A" },
new CycleType { Type = "Racer" },
new CycleType { Type = "Leisure Cycle Type B" },
new CycleType { Type = "Mountain Bike Type B" }
};
new List<CycleModel>
{
new CycleModel{ Model = "Challenge 26in", CycleType = _CycleType.Single(r => r.Type == "Racer") },
new CycleModel{ Model = "Challenge 27in", CycleType = _CycleType.Single(r => r.Type == "Racer") },
new CycleModel{ Model = "Muddy Fox Vortex", CycleType = _CycleType.Single(r => r.Type == "Leisure Cycle Type A") },
new CycleModel{ Model = "Laser 8", CycleType = _CycleType.Single(r => r.Type == "Leisure Cycle Type B") },
new CycleModel{ Model = "Silverfox 26in", CycleType = _CycleType.Single(r => r.Type == "Mountain Bike Type B") }
}.ForEach(IndividualRow => context.CycleModel.Add(IndividualRow));
}
}
Après avoir couru cette classe, je trouve que ...
Deux tables créées.
1) Modèle Cycle (toute ligne insérée correctement).
2) Type Cycle (une ligne de gauche à insérer) [Problème].
Montagne Type de vélo A n'est pas insérer à la table CycleType.
Je pense, je dois modifier mon code, mais je ne sais pas comment je pourrais le faire.
Je ne veux pas insérer une autre ligne comme ci-dessous pour qu'il puisse résoudre mon problème.
new CycleModel{ Model = "Testing...", CycleType = _CycleType.Single(r => r.Type == "Mountain Bike Type A") }
S'il vous plaît laissez-moi suggestion.
La solution
Procédé de semences () doit se terminer par un context.SaveChanges()
.
À l'heure actuelle, il y a quelque chose étrange est sauvé du tout.
Mais il est clair que « Mountain Bike type A » est référencé par aucun CycleModel et qui est la raison pour laquelle il est laissé de côté.
Vous pouvez probablement le fixer avec
_CycleType.ForEach(IndividualRow => context.CycleType.Add(IndividualRow));
Autres conseils
Vous n'ajouterez CycleModel
s au contexte. Lorsque vous ajoutez un CycleModel
EF ajoutera toutes les entités connexes instance de CycleModel
garder référence à. Voici la liste des CycleModel
s ajoutée au contexte n'a pas rapport à la CycleType
« Mountain Bike type A ». Par conséquent, il est pas ajouté.
Vous pouvez ajouter tous les CycleType
s d'abord.
var _CycleType = new List<CycleType>
{
new CycleType { Type = "Leisure Cycle Type A" },
new CycleType { Type = "Mountain Bike Type A" },
new CycleType { Type = "Racer" },
new CycleType { Type = "Leisure Cycle Type B" },
new CycleType { Type = "Mountain Bike Type B" }
}.ForEach(c => context.CycleType.Add(c));
Vous pouvez ajouter cette instance séparément.
context.CycleType.Add(_CycleType.Single(r => r.Type == "Mountain Bike Type A"));