MVC | Linq Update Query | Помогите! - PullRequest
0 голосов
/ 31 января 2011

Я делаю модификации в приложении C # MVC, которое я унаследовал.

У меня есть база данных, и для простоты я просто сосредоточусь на двух таблицах, с которыми я работаю, для этого запроса linq.

Item
ItemID Int PK
ItemName
RepairSelection (да или нет)
RepairID Int FK

Ремонт
RepairID Int PK
RepairCategory
SubmissionDate
DateSentForRepair

Хорошо, поэтому ItemID является в значительной степени идентификатором, а представление для отображения сведений о восстановлении выглядит следующим образом (фрагмент):

            <%= Html.LabelFor(x => x.ItemID)%>
            <%= Html.DisplayFor(x => x.ItemID)%><br />
            <%= Html.LabelFor(x => x.Repair.RepairCategory)%>
            <%= Html.DisplayFor(x => x.Repair.RepairCategory, "FormTextShort")%><br />
            <%= Html.LabelFor(x => x.Repair.SubmissionDate)%>
            <%= Html.DisplayFor(x => x.Repair.SubmissionDate)%><br />
            <%= Html.LabelFor(x => x.Repair.DateSentForRepair)%>
            <%= Html.DisplayFor(x => x.Repair.DateSentForRepair)%><br />

<%= Html.ActionLink("Edit Repair Details", "Edit", new { ItemID= Model.ItemID})%>

Вот действие GET Edit:

public ActionResult Edit(Int64? itemId)
        {
            ModelContainer ctn = new ModelContainer();
            var item = from i in ctn.Items where i.ItemID == itemId select i;
            return View(item.First());
        }

Это тоже хорошо, в окне GET Edit отображаются правильные детали. Я застрял в запросе linq для обновления таблицы восстановления. Сегодня я пробовал так много способов, что моя голова просто зажарилась (новичок в Linq, как вы уже догадались). Моя последняя попытка здесь (я знаю, что это далеко, так что будьте спокойны ;-)):

 [HttpPost]
        public ActionResult Edit(Int64 itemId, Repair repair, Item item, FormCollection formValues)
        {
            if (formValues["cancelButton"] != null)
            {
                return RedirectToAction("View", new { ItemID = itemId });
            }

            ModelContainer ctn = new ModelContainer();

            Repair existingData = ctn.Repair.First(a => a.RepairId == item.RepairID && item.ItemID == itemId);

            existingData.SentForConversion = DateTime.Parse(formValues["SentForConversion"]);

            ctn.SaveChanges();

            return RedirectToAction("View", new { ItemID = itemId });
        }

Для вышеуказанной попытки я получаю ошибку Sequence No Elements.

Любая помощь или указатели будут оценены. Спасибо, ребята.

Ответы [ 2 ]

1 голос
/ 31 января 2011

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

0 голосов
/ 31 января 2011

Похоже, что для repairID в таблице Items отсутствуют соответствующие строки в таблице Repair,

Проверьте данные, используя следующий запрос:

SELECT RepairID FROM Items
EXCEPT
SELECT RepairID FROM Repair

В этом списке перечислены все недостающие идентификаторы repairID в таблице восстановления.

Если данные дела необходимо исправить или вам нужно использовать FirstOrDefault и проверить на обнуляемость возвращаемого значения, т.е.:

Repair existingData = ctn.Repair.FirstOrDefault(a => a.RepairId == item.RepairID && item.ItemID == itemId);

    if( existingData!= null)
    {
       existingData.SentForConversion = DateTime.Parse(formValues["SentForConversion"]);
       ctn.SaveChanges();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...