Я получаю эту ошибку:
"Преобразование типа данных datetime2 в тип данных datetime привело к значению вне допустимого диапазона.
Оператор был прерван."
Представление, взаимодействующее с пользователями, имеет следующий соответствующий код:
@Html.LabelFor(model => model.BirthDate)
@Html.TextBoxFor(model => model.BirthDate, new { size = "50", @type = "date", @class = "AddMemberControls" })
Текстовое поле, в которое пользователь должен ввести дату, говорит «мм / дд / гггг» (и показывает календарь, где пользователь может выбрать дату)
Метод контроллера выглядит следующим образом:
public ActionResult AddMember(string firstName, string lastName, DateTime birthDate, int age, string sportType)
{
var member = new Member() { FirstName = firstName, LastName = lastName, Age = age, SportType = sportType, BirthDate = birthDate };
coloContext.Members.Add(member);
coloContext.SaveChanges();
return View();
}
И модель:
[Column(TypeName = "datetime2")]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime BirthDate { get; set; }
Если, например, пользователь выбирает дату 05/01/18
, то при отладке и проверке параметра даты рождения он говорит: 01-May-18 12:00:00 AM
Полагаю, проблема в том, что он пишет "May", а база данных не знает, как его сохранить?
Я вижу, что в Интернете много об этой проблеме, и несколько попыток найти решение, но, к сожалению, ни одна из них не сработала для меня.
Я пробовал:
Добавить аннотацию с типом столбца
[Column(TypeName = "datetime2")]
Создание Datime nullabe в моей модели (какие предложено несколько решений). Но это решение не имеет большого смысла для меня. Особенно, когда я знаю, что этот параметр не может быть нулевым
public DateTime? BirthDate { get; set; }
Пытался разобрать DateTime, надеясь, что он избавится от "мая". Хотя, если возможно, я бы хотел, чтобы дата была сохранена в этом формате.
DateTime test = DateTime.parse(birthDate.ToString())
Некоторые предлагали изменить на DateTime2, но нет объекта с именем DateTime2? Я все равно попробовал, но получил ошибку на этом
public DateTime2 BirthDate { get; set; }
И еще несколько решений, которые я забыл.