Pregunta

Tengo una clase que hereda 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));
    }        
}

Después de ejecutar esta clase, descubrí que ...
Dos tablas creadas.
1) Modelo de ciclo (toda la fila insertada correctamente).
2) Tipo de ciclo (una fila izquierda para insertar) [Problema].

La bicicleta de montaña Tipo A no es insertar en la tabla Cycletype.
Creo que necesito modificar mi código, pero no sé cómo podría hacerlo.

No quiero insertar otra fila como a continuación para que pueda resolver mi problema.

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

Por favor, déjame recibir sugerencias.

¿Fue útil?

Solución

Un método de semilla () debe terminar con un context.SaveChanges().

Tal como está ahora, es extraño, cualquier cosa se guarda en absoluto.

Pero está claro que "Mountain Bike Type A" no es referenciado por ningún ciclodelo y es por eso que queda fuera.

Probablemente puedas arreglarlo con

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

Otros consejos

Solo estas agregando CycleModels al contexto. Cuando agregas un CycleModel EF agregará todas las entidades relacionadas que CycleModel instancia mantenga la referencia a. Aquí la lista de CycleModelS agregado al contexto no tiene ninguna relación con el CycleType "Montaña Bike Tipo A". Por lo tanto, no se agrega.

Puedes agregar todo el CycleTypes primero.

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

O puede agregar esa instancia por separado.

context.CycleType.Add(_CycleType.Single(r => r.Type == "Mountain Bike Type A"));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top