簡體   English   中英

如何使用實體框架codefirst在數據庫中插入null Datetime

[英]how to insert null Datetime in database with entity framework codefirst

我的模型包含一個可以為空的datetime屬性。 我正在使用CodeFirst

 public DateTime? GoDate { get; set; }

我想在該字段中插入一個nullvalue但是EF插入通常的00/00/0001日期而不是null,這也給了我一個錯誤。

即時通訊使用microsoft sql server 2012。

DateTime? date = null;
var entity = new Model()
                {
                    GoDate = date
                };

DataContext.Models.Add(entity);
DataContext.SaveChanges();

給我錯誤。

將datetime2數據類型轉換為日期時間數據類型會導致超出范圍的值。\\ r \\ n語句已終止。

這是因為sql server datetime不能有00/00/0001,一旦它將null日期時間插入數據庫,EF就會自動生成。

我想在db中插入null。

EF插入通常的00/00/0001日期而不是null

它沒什么常見的 保留給自己的設備,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; }
    }
}

在此輸入圖像描述

您的映射或數據庫架構很可能是錯誤的。

或者你可以像這樣設置:

var entity= new Model
{
    GoDate = (DateTime?) null
}
DataContext.Models.Add(entity);
DataContext.SaveChanges();

我認為它有點清潔。

你可以用這個:

 Nullable<DateTime> date=null;
 var entity = new Model()
            {
                GoDate = date
            };

   DataContext.Models.Add(entity);
   DataContext.SaveChanges();

你可以在你的模型中使用這樣的東西。 然后從您的控制器發送null將正常工作。

 [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        [Display(Name = "Date")]
        public DateTime? Date { get; set; }

注意“?” 在DateTime日期之前

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM