EF6 не сохраняет изменения - PullRequest
       3

EF6 не сохраняет изменения

0 голосов
/ 31 августа 2018

В следующем коде я обернул dbContextTransactions вокруг нескольких изменений. Все из ViewModel содержит правильные данные, но по какой-то причине EF не сохраняет изменения. Когда я отлаживаю его, я не вижу ни одного исключения. Есть ли что-то особенное, что мне нужно сделать для транзакции, которая помешала бы этому работать?

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

    public static Logger logger = LogManager.GetCurrentClassLogger();

    public static Guid AddPlanItem(PlanItemAddViewModel viewModel, IEnumerable<HttpPostedFileBase> images)
    {
        Guid planIdGUID = Guid.NewGuid();

        using (var context = new ApplicationDbContext())
        {
            using (var dbContextTransaction = context.Database.BeginTransaction())
            {
                try
                {
                    PlanItem planItem = context.Plans.Create();

                    planItem.PlanId = planIdGUID;
                    planItem.CreateDate = DateTime.Now;
                    planItem.PlanIdTitle = viewModel.PlanIdTitle;
                    planItem.PlanTitle = viewModel.PlanTitle;
                    planItem.SolutionTitle = viewModel.SolutionTitle;
                    planItem.ActivityCodeId = viewModel.ActivityCodeId;
                    planItem.RegionId = viewModel.RegionId;
                    planItem.OperatingCenterId = viewModel.OperatingCenterId;
                    planItem.DistrictId = viewModel.DistrictId;
                    planItem.ServiceCenterId = viewModel.ServiceCenterId;
                    planItem.PlannerRACFId = viewModel.PlannerRACFId;
                    planItem.SeverityId = viewModel.SeverityId;
                    planItem.Description = viewModel.Description;
                    planItem.PreviousPlan = viewModel.PreviousPlan;

                    context.Plans.Add(planItem);
                    context.SaveChanges();

                    foreach (HttpPostedFileBase image in images)
                    {
                        var imageSubmit = new PlanItemImage
                        {
                            PlanId = planIdGUID,
                            PlanImageId = Guid.NewGuid(),
                            Image = image.ConvertToByte(),
                            ImageTitle = image.FileName
                        };

                        context.Image.Add(imageSubmit);
                        context.SaveChanges();
                    }

                    dbContextTransaction.Commit();
                }
                catch (Exception ex)
                {
                    logger.Error("Error: " + ex.Message);
                    dbContextTransaction.Rollback();
                }
            }
        }

        return planIdGUID;
    }

1 Ответ

0 голосов
/ 31 августа 2018

Что касается кода, который я вижу, я не совсем уверен, в чем может быть проблема (пока). Тем не менее, мы можем использовать подход, чтобы определить, в чем проблема.

Сначала давайте упростим упрощение кода.

public static Guid AddPlanItem(PlanItemAddViewModel viewModel, IEnumerable<HttpPostedFileBase> images)
{
    Guid planIdGUID = Guid.NewGuid();

    using (var context = new ApplicationDbContext())
    {
        PlanItem planItem = context.Plans.Create();

        planItem.PlanId = planIdGUID;
        planItem.CreateDate = DateTime.Now;
        planItem.PlanIdTitle = viewModel.PlanIdTitle;
        planItem.PlanTitle = viewModel.PlanTitle;
        planItem.SolutionTitle = viewModel.SolutionTitle;
        planItem.ActivityCodeId = viewModel.ActivityCodeId;
        planItem.RegionId = viewModel.RegionId;
        planItem.OperatingCenterId = viewModel.OperatingCenterId;
        planItem.DistrictId = viewModel.DistrictId;
        planItem.ServiceCenterId = viewModel.ServiceCenterId;
        planItem.PlannerRACFId = viewModel.PlannerRACFId;
        planItem.SeverityId = viewModel.SeverityId;
        planItem.Description = viewModel.Description;
        planItem.PreviousPlan = viewModel.PreviousPlan;

        context.Plans.Add(planItem);
        context.SaveChanges();
    }

    return planIdGUID;
}

Таким образом, мы достигаем двух вещей:

  1. Удалив try / catch, мы сможем увидеть любые возможные исключения
  2. Упрощая логику сохранения, мы можем определить, где находится проблема. Если с этим кодом все работает, мы можем включить фрагмент, который сохраняет изображение и его поведение.

Во-вторых, если все работает нормально, мы можем добавить следующий фрагмент, изображения, но на этот раз с сохранением изменений за пределами for.

foreach (HttpPostedFileBase image in images)
{
    var imageSubmit = new PlanItemImage
    {
        PlanId = planIdGUID,
        PlanImageId = Guid.NewGuid(),
        Image = image.ConvertToByte(),
        ImageTitle = image.FileName
    };

    context.Image.Add(imageSubmit);    
}

context.SaveChanges();

UPDATE

Проблема возникла из-за нескольких вызовов SaveChanges (). Редактирование кода для одного решает проблему.

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