Domanda

Ho una classe che eredita da 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));
    }        
}

Dopo corro questa classe, ho trovato che ...
Due tabelle create.
1) Ciclo di Modello (tutte riga inserita correttamente).
2) Tipo di ciclo (una riga a sinistra per inserire) [Problema].

Mountain Bike tipo A non è inserto a tavola CycleType.
Penso, ho bisogno di modificare il mio codice, ma non so come avrei potuto farlo.

Non voglio inserire un'altra riga come qui di seguito in modo che possa risolvere il mio problema.

new CycleModel{ Model = "Testing...", CycleType =  _CycleType.Single(r => r.Type == "Mountain Bike Type A") }

mi permetta di ottenere il suggerimento.

È stato utile?

Soluzione

A Seed() method should end with a context.SaveChanges().

As it stands now it's strange anything is saved at all.

But it's clear that "Mountain Bike Type A" is not referenced by any CycleModel and that is why it's left out.

You can probably fix it with

 _CycleType.ForEach(IndividualRow => context.CycleType.Add(IndividualRow));

Altri suggerimenti

You are only adding CycleModels to the context. When you add a CycleModel EF will add all the related entities that CycleModel instance keep reference to. Here the list of CycleModels added to the context does not have any relation to the CycleType "Mountain Bike Type A". Hence it is not added.

You can add all the CycleTypes first.

    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)); 

Or you can add that instance separately.

context.CycleType.Add(_CycleType.Single(r => r.Type == "Mountain Bike Type A"));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top