Функция заполнения структуры сущности не вставила все данные в базу данных - PullRequest
0 голосов
/ 10 января 2012

У меня есть класс, который наследуется от 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) Тип цикла (для вставки осталась одна строка) [Проблема].

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 10 января 2012

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

Как сейчас, странно, что что-то вообще сохраняется.

Но ясно, что на "Велосипед типа А" не ссылается ни одна модель CycleModel, и именно поэтому она не указана.

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

 _CycleType.ForEach(IndividualRow => context.CycleType.Add(IndividualRow));
2 голосов
/ 10 января 2012

Вы только добавляете CycleModel s в контекст.Когда вы добавляете CycleModel EF добавит все связанные сущности, на которые экземпляр CycleModel ссылается.Здесь список CycleModel, добавленных к контексту, не имеет никакого отношения к CycleType "Mountain Bike Type A".Следовательно, он не добавляется.

Вы можете сначала добавить все CycleType s.

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