Frage

Ich habe eine Klasse, die von DropCreatedatabaseIfModelChanges erben.

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

Nachdem ich diese Klasse geführt hatte, fand ich das ...
Zwei erstellte Tabellen.
1) Zyklusmodell (alle Zeilen korrekt eingefügt).
2) Zyklusart (eine Zeile zum Einfügen links) [Problem].

Mountain Bike Typ A wird nicht zum Tisch -Cycletyp eingesetzt.
Ich denke, ich muss meinen Code ändern, aber ich weiß nicht, wie ich es tun könnte.

Ich möchte keine andere Zeile wie unten einfügen, damit sie mein Problem lösen kann.

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

Bitte lassen Sie mich einen Vorschlag bekommen.

War es hilfreich?

Lösung

Eine Seed () -Methode sollte mit a enden context.SaveChanges().

Wie es jetzt aussieht, ist es seltsam, dass überhaupt etwas gerettet wird.

Es ist jedoch klar, dass "Mountain Bike Typ A" von keinem Cyclemodel verwiesen wird, und deshalb wird es ausgelassen.

Sie können es wahrscheinlich mit reparieren

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

Andere Tipps

Sie fügen nur hinzu CycleModels zum Kontext. Wenn Sie a hinzufügen CycleModel EF fügt alle verwandten Einheiten hinzu, die CycleModel Instanz beziehen sich auf. Hier die Liste von CycleModels hinzugefügt zum Kontext hat keinen Zusammenhang mit der CycleType "Mountain Bike Typ A". Daher wird es nicht hinzugefügt.

Sie können alle hinzufügen CycleTypes zuerst.

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

Oder Sie können diese Instanz separat hinzufügen.

context.CycleType.Add(_CycleType.Single(r => r.Type == "Mountain Bike Type A"));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top