Я довольно новичок в C# и ASP.NET (и вообще программировании) и попробую сделать несколько простых упражнений.Получите наибольшее значение из таблицы, если null
Что я пытаюсь сделать: Я хотел бы создать простое приложение MVC, в котором у записей будут версии. То есть: Учитывая запись, которую я собираюсь изменить с помощью «Редактировать» -View, эта запись не будет перезаписана. Вместо этого будет создана новая запись (например, новая версия). Оба, старые и новые записи, имеют тот же ItemId (который не является первичным ключом!), Который связывает их вместе «семантически». Чтобы узнать, какая запись является новой версией, более новая запись имеет VersionId, которая равна +1 версии VersionId более старой.
В настоящее время: Я начал работать над созданием-действием. Новая запись должна получить значение 1, это VERSIONID и ItemId крупнейший Itemid уже в БД плюс 1 - если нет записи в БД и в этом случае ItemId не должно быть 1.
Модель:
namespace HowToUpdate.Models
{
public class ItemWithVersion
{
public int Id { get; set; }
public int ItemNr { get; set; }
public int VersionNr { get; set; }
public string Name { get; set; }
}
}
Действие регулятора:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,Name")] ItemWithVersion itemWithVersion)
{
if (ModelState.IsValid)
{
// set the ItemNr
int currentMaxItemNr = db.ItemWithVersions.Max(i => i.ItemNr);
itemWithVersion.ItemNr = currentMaxItemNr + 1;
// set the VersionNr
itemWithVersion.VersionNr = 1;
db.ItemWithVersions.Add(itemWithVersion);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(itemWithVersion);
}
Проблема: Когда я бегу localhost/ItemWithVersion/Create
, е nter a Значение для имени и отправки, я получаю следующую ошибку: «Приведение значения к типу« System.Int32 »не выполнено, потому что материализованное значение равно null. Либо общий параметр типа результата, либо запрос должны использовать тип с нулевым значением. Источник ошибки: int currentMaxItemNr = db.ItemWithVersions.Max(i => i.ItemNr);
"
Я пробовал:
// set the ItemNr
int currentMaxItemNr = db.ItemWithVersions.Max(i => i.ItemNr);
if (currentMaxItemNr == null)
{
itemWithVersion.ItemNr = 1;
}
else
{
itemWithVersion.ItemNr = currentMaxItemNr + 1;
}
Теперь ошибка, кажется int currentMaxItemNr = db.ItemWithVersions.Max(i => i.ItemNr);
Также int? currentMaxItemNr = db.ItemWithVersions.Max(i => i.ItemNr);
и var currentMaxItemNr = db.ItemWithVersions.Max(i => i.ItemNr);
не будет никакой пользы
Это, наверное. базовая, но мне нужна ваша помощь! :) Thx.
Спасибо! Мне кажется, это лучшее решение. Мне не нужно менять модель, действие остается коротким и понятным. :) – roxxistic