Преобразование типа данных datetime2 в тип данных datetime приводило к превышению значения
У меня есть приложение ASP.NET MVC, где я редактирую существующую базу данных, чтобы обновить поле paticular, DateTime
. Моя база данных имеет 4 поля, две из которых DateCreated и DateModified. Когда я пытаюсь обновить поле, я хочу сохранить DateCreated время одинаковое, нет причины обновлять дату, когда он был создан, и я изменяю время DateModified на текущее время с помощью DateTime.Now
Вот данный код, в любом случае я делаю что-то неправильно. Это мой первый раз, используя ASP.NET MVC, так что нежно. Я видел другие ответы, где Context
вызывается, но я не могу найти ссылки на него. Когда я запускаю приложение, я получаю сообщение об ошибке в заголовке, а contractEntity.SaveChanges()
- в красном.
public ActionResult Edit(Contract editContract) {
var contract = (from c in contractEntity.Contracts where c.Id == editContract.Id select c).First();
if (!ModelState.IsValid)
return View(contract);
// editContract.DateCreated = contract.DateCreated;
// editContract.DateModified = DateTime.Now;
contractEntity.ApplyCurrentValues(contract.EntityKey.EntitySetName, editContract);
contractEntity.SaveChanges();
return RedirectToAction("Index");
}
Пожалуйста, любая помощь приветствуется. Спасибо.
Ответы
Ответ 1
После прочтения этого веб-сайта я нашел, чтобы открыть .edmx файл для моей базы данных и изменить:
<...Provider="System.Data.SqlClient" ProviderManifestToken="2008".../>
к
<...Provider="System.Data.SqlClient" ProviderManifestToken="2005".../>
Является ли это приемлемым или есть лучший подход к исправлению этой ошибки?
Ответ 2
Для меня у меня была такая же проблема, но проблема заключалась в том, что по умолчанию, когда я сохранил мою модель, создавалось недействительное DateTime. У меня было поле CreateOn, и я ничего не установил, что означало, что значение было 01/01/0001, что было неверным DateTime для SQL. Настройка этого избавила меня от этой проблемы.
Ответ 3
Вы также можете отредактировать модель (или в EF в .edmx) и установить StoreGeneratedPattern
в Computed для данного поля. Это приведет к тому, что он не сохранит это в этом поле, потому что он вычисляется SQL-сервером.
Ответ 4
У меня такая же ошибка, и я обнаружил, что если у вас есть SQL 2008 DB с полем DateTime Nullable, НЕ явное назначение Null (Nothing) в поле вашего кода, это приведет к этой ошибке, или вы можете измените все поля DateTime на DateTime2.
Ответ 5
Просто используйте DateTime с нулевым значением DateTime? в свойстве сущности домена, если ваш столбец в вашей базе данных может быть нулевым. Это заставит его работать.