Как вставить 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