Функция семянного фреймворта предприятия не вставляла все данные в базу данных

StackOverflow https://stackoverflow.com/questions/8801901

Вопрос

У меня есть класс, который наследуют от 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));
    }        
}

После того, как я запустил этот класс, я обнаружил, что ...
Две таблицы созданы.
1) Модель цикла (все строки вставлены правильно).
2) Тип цикла (одна строка осталась для вставки) [Проблема].

Горный велосипед тип А не вставлен в столовую циклетип.
Я думаю, мне нужно изменить свой код, но я не знаю, как я могу это сделать.

Я не хочу вставлять еще одну строку, как ниже, чтобы он мог решить мою проблему.

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

Пожалуйста, позвольте мне получить предложение.

Это было полезно?

Решение

Метод семян () должен закончиться context.SaveChanges().

В настоящее время это странно, что -то сохранено вообще.

Но ясно, что «Горный велосипед тип А» не ссылается ни одной циклеемодель, и именно поэтому он остается в стороне.

Вы, вероятно, можете исправить это с помощью

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

Другие советы

Вы только добавляете CycleModelS в контекст. Когда вы добавляете CycleModel EF добавит все связанные объекты, которые CycleModel экземпляр сохраните ссылку на. Здесь список CycleModelS добавлен в контекст, не имеет никакого отношения к CycleType «Горный велосипед тип А». Следовательно, это не добавлено.

Вы можете добавить все CycleTypeS первой.

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

Или вы можете добавить этот экземпляр отдельно.

context.CycleType.Add(_CycleType.Single(r => r.Type == "Mountain Bike Type A"));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top