Функция семянного фреймворта предприятия не вставляла все данные в базу данных
-
25-10-2019 - |
Вопрос
У меня есть класс, который наследуют от 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));
Другие советы
Вы только добавляете CycleModel
S в контекст. Когда вы добавляете CycleModel
EF добавит все связанные объекты, которые CycleModel
экземпляр сохраните ссылку на. Здесь список CycleModel
S добавлен в контекст, не имеет никакого отношения к CycleType
«Горный велосипед тип А». Следовательно, это не добавлено.
Вы можете добавить все 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"));