Я использую Entity Framework для передачи данных в таблицу. В представлении я собираю дату, но так как таблица настроена, даты не передаются в базу данных как даты. Вместо этого день, месяц и год передаются как отдельные значения в виде целых чисел. Итак, на 25.10.2009 вы отправляете 25, 10, 2019 как целые, чтобы заполнить отдельные столбцы. Ничто другое не имеет отношения к датам.
Однако, когда я пытаюсь сохранить saveChanges (), выдается следующая ошибка:
{"Преобразование типа данных datetime2 в тип данных datetime привело к потере-range value. \ r \ nОпределение прервано. "}
Я не обращал внимания на эту ошибку раньше, когда проходили dateTimes, но я никогда не видел его, когда база данныхне получая дату времени. Вот модель:
public partial class rbExperience
{
public int rb_id { get; set; }
public Nullable<short> diver_no { get; set; }
public Nullable<int> skill_level { get; set; }
public Nullable<byte> training { get; set; }
public string instructor { get; set; }
public Nullable<int> year_of_training { get; set; }
public Nullable<int> dives_last_12_months { get; set; }
public Nullable<int> last_rb_dive_month { get; set; }
public Nullable<int> last_rb_dive_day { get; set; }
public Nullable<int> last_rb_dive_year { get; set; }
public Nullable<short> num_hours { get; set; }
public Nullable<short> num_dives { get; set; }
public Nullable<short> max_dive_depth_life { get; set; }
}
Эта модель была построена с использованием структуры сущностей, поэтому она точна для базы данных. У меня есть доступ к базе данных, и я могу убедиться, что не было внесено никаких изменений, и нигде в этой таблице нет дат.
rbExperience experience = new rbExperience()
{
rb_id = GeneralExperience.DiverNumber,
diver_no = 1,
dives_last_12_months = GeneralExperience.NumberOfDives,
last_rb_dive_day = GeneralExperience.LastDive.Day,
last_rb_dive_month = GeneralExperience.LastDive.Month,
last_rb_dive_year = GeneralExperience.LastDive.Year,
skill_level = skill,
training = GeneralExperience.HasFormerTraining ? (byte)1 : (byte)2,
instructor = GeneralExperience.Instructor,
year_of_training = GeneralExperience.YearOfTraining,
num_dives = (short)GeneralExperience.NumberOfDives
};
if (isSCUBA)
{
experience.max_dive_depth_life = (short)SCUBAExperience.MaxDiveDepth;
}
else
{
experience.max_dive_depth_life = (short)RBExperience.MaxDiveDepth;
experience.num_hours = (short)RBExperience.HoursOnRebreather;
};
rbExperience retured = db.rbExperiences.Add(experience);
db.SaveChanges();
Вот две модели, которые я использую для просмотра. var GeneralExperience происходит из класса опыта. (не беспокойтесь о части isSCUBA. Она выдает ту же ошибку)
public class Experience
{
[Display(Name = "Skill Level")]
public List<SelectListItem> SkillLevels { get; set; }
public string SkillLevel { get; set; }
public bool HasFormerTraining { get; set; }
[Display(Name = "Instructor Name")]
public string Instructor { get; set; }
[Display(Name = "Year of Formal Training")]
public int YearOfTraining { get; set; }
public DateTime LastDive { get; set; }
public int NumberOfDives { get; set; }
public int DiverNumber { get; set; }
}
public class RebreatherExperience
{
[Display(Name = "How many hours on this Rebreather?")]
public int HoursOnRebreather { get; set; }
[Display(Name = "What is the victim's maximum dive depth?")]
public int MaxDiveDepth { get; set; } //Ever, not just for the once incident.
}