Как сохранить несколько объектов одновременно в базе данных, используя сущность - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь добавить список объектов и сохранить их в базе данных раз и навсегда. Проблема в том, что в базе данных сохраняется только последний сохраненный идентификатор. И мой код выглядит так:

public void MapCarIdToDepartment(int DepartmentId, List<Guid> carIds)
{
    var departmentCar = new DepartmentCar();
    foreach (var item in carIds) {
        departmentCar.CarId = item;
        departmentCar.DepartmentId = DepartmentId;
        departmentCar.State = ObjectState.Added;
        Save(departmentCar);
    }
}

Примечание: я использую шаблон репозитория

1 Ответ

1 голос
/ 21 марта 2019

Вы обновляете одну и ту же ссылку на объект каждый раз. Переместите объявление нового DepartmentCar внутри цикла.

public void MapCarIdToDepartment(int DepartmentId, List<Guid> carIds)
{
    foreach (var item in carIds)
    {
       var departmentCar = new DepartmentCar
       {
           CarId = item,
           DepartmentId = DepartmentId
       };
       Save(departmentCar);
    }
}

В идеале, хотя все, что вам нужно сделать, это создать новую машину, добавить ее в DbSet Cars DbContext, а после этого вызвать SaveChanges для контекста в конце. Хотя для идентификаторов, если возможно получить существующие автомобили, вам нужно будет проверить контекст для того существующего объекта, чтобы обновить против создания нового.

public void MapCarIdToDepartment(int departmentId, List<Guid> carIds)
{
    using (var context = new CarContext())
    {
        foreach (var carId in carIds)
        {
            var car = context.DepartmentCars.SingleOrDefault(x => x.CarId == carId);
            if (car == null)
            {
                car = new DepartmentCar{ CarId = carId };
                context.DepartmentCars.Add(car);
            }
            car.DepartmentId = departmentId;
        }
        context.SaveChanges();
    }
}

Это позволит проверить существующий автомобиль, обновить его, если необходимо, или создать новый и обновить. Если создание сущности достаточно сложное, создайте метод фабрики, такой как «createCar (carId, [+ другие необходимые значения / ссылки])», чтобы облегчить выполнение кода.

Здесь рассмотрим внедрение зависимости или единицу работы для DbContext, а не обновление контекста в методе / классе. DbContexts - это мощный инструмент, который вы можете использовать, поэтому я не рекомендую пытаться скрыть их за традиционными интерфейсами оболочки CRUD. (Получить (), Сохранить () и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...