Как вставить null Datetime в базу данных с сущностью framework codefirst
моя модель включает свойство nullable datetime. Используя CodeFirst
public DateTime? GoDate { get; set; }
Я хотел бы вставить значение nullvalue в это поле, но EF вставляет обычную дату 00/00/0001 вместо null, что также дает мне ошибку.
im, используя сервер Microsoft SQL Server 2012.
DateTime? date = null;
var entity = new Model()
{
GoDate = date
};
DataContext.Models.Add(entity);
DataContext.SaveChanges();
введите ошибку.
Преобразование типа данных datetime2 в тип данных datetime приводило к значению вне диапазона.\r\nПриложение завершено.
Это связано с тем, что SQL-сервер datetime не имеет 00/00/0001, который автоматически генерирует EF, когда он вставляет в базу данных нулевое datetime.
Я хочу вставить нуль в db.
Ответы
Ответ 1
EF вставляет обычную 00/00/0001 дату вместо нулевого
В этом нет ничего обычного. Оставленный на свои устройства, EF 6.1 вставляет NULL
.
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var DataContext = new StackOverflowContext();
DateTime? date = null;
var entity = new Model()
{
GoDate = date
};
DataContext.Models.Add(entity);
DataContext.SaveChanges();
}
}
class Model
{
public int ModelId { get; set; }
public DateTime? GoDate { get; set; }
}
class StackOverflowContext : DbContext
{
public DbSet<Model> Models { get; set; }
}
}
![enter image description here]()
Скорее всего, ваши сопоставления или схема базы данных неверны.
Ответ 2
Или вы можете просто задать так:
var entity= new Model
{
GoDate = (DateTime?) null
}
DataContext.Models.Add(entity);
DataContext.SaveChanges();
Я думаю, что это немного чище.
Ответ 3
Вы можете использовать это:
Nullable<DateTime> date=null;
var entity = new Model()
{
GoDate = date
};
DataContext.Models.Add(entity);
DataContext.SaveChanges();
Ответ 4
Вы можете использовать что-то подобное в своей модели. то отправка нулевого с вашего контроллера будет работать нормально.
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Date")]
public DateTime? Date { get; set; }
Обратите внимание на "?" до даты DateTime