如何使用实体框架代码首先在数据库中插入空日期时间

问题描述 投票:0回答:4

我的模型包含一个可为空的日期时间属性。我使用 CodeFirst

 public DateTime? GoDate { get; set; }

我想在该字段中插入一个空值,但 EF 插入通常的 00/00/0001 日期而不是空值,这也会给我一个错误。

我正在使用 microsoft sql server 2012。

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

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

请告诉我错误。

将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。 该声明已终止。

这是因为 sql server 日期时间不能有 00/00/0001,EF 在将空日期时间插入数据库后会自动生成该值。

我想将 null 插入数据库。

c# asp.net entity-framework
4个回答
17
投票

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; }
    }
}

enter image description here

您的映射或数据库架构很可能是错误的。


3
投票

或者你可以这样设置:

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

我觉得这样更干净一点。


3
投票

您可以在模型中使用类似的东西。然后从你的控制器发送 null 就可以正常工作了。

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

注意日期时间后面的

?


1
投票

你可以使用这个:

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

DataContext.Models.Add(entity);
DataContext.SaveChanges();
© www.soinside.com 2019 - 2024. All rights reserved.