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.

Était-ce utile?

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 CycleModels 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 CycleModels 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 CycleTypes 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"));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top