只在数据库中存储日期而非时间部分 C#

31

我有一个测试类和一个ExecutionDate属性,它仅存储日期,但当我们使用[DataType(DataType.Date)]时,它也将时间部分存储在数据库中,但我只想要日期部分。

public class Test
{
     [Key]
     public int Id { get; set; }

     [DataType(DataType.Date)]
     public DateTime ExecutionDate { get; set; }      
}

是否有办法使用Entity Framework仅在时间部分存储日期到数据库中?请帮帮我...

当使用[DataType(DataType.Date)]时,我已经添加了快照,它会存储时间部分00:00,我想要去掉它

输入图像描述


那么,在您的数据库表中,列的数据类型是什么?如果您的数据库中的列是DATETIME类型,则当然会存储日期和时间。数据库列必须是DATE数据类型,而不仅仅是C#类中的属性! - marc_s
将您的数据库列设置为 DATE 类型! - marc_s
这更像是一个查看问题而不是存储问题。即使时间部分设置为无,日期时间仍然是日期时间。您用于显示表内容的工具只显示日期时间的默认格式。如果您不想看到时间部分,请更改用于查看数据库内容的工具的设置。 - Ralf
你只能在数据库层面上将其设置为DATE类型 - 在.NET和Entity Framework中,我们没有特定的“仅日期”数据类型。在.NET代码中,你总是有日期和时间 - 无法更改。但是在SQL Server数据库表中,你可以将其设置为DATE并仅存储日期。 - marc_s
你的数据库是如何创建的?如果你遵循Code First并从你的代码生成数据库,那么你必须在该属性上添加Column(TypeName="date")属性。 - CodeNotFound
6个回答

61

我认为你正在尝试指定数据库列的类型。你可以像这篇文章中所述,使用数据注释来实现。

这里是一个例子:

[Table("People")]
public class Person
{
    public int Id { get; set; }

    [Column(TypeName = "varchar")]
    public string Name { get; set; }

    [Column(TypeName="date")]
    public DateTime DOB { get; set; }
}

默认情况下,字符串被翻译为nvarchar,但我们在这里进行了更改。另外,日期时间(我想这就是您所询问的内容)默认映射到 SQL Server 中的datatime,我们将其更改为date,该类型仅存储DateTime值的日期部分而不是时间部分。


4

在 EF Core 中,可以在 DbContext 类中添加 override OnModelCreating 方法。

protected override void OnModelCreating(ModelBuilder builder)
        {
            builder.Entity<Test>().
                Property(p => p.ExecutionDate)
                .HasColumnType("date");
        }

这与特定的数据库引擎有关吗? - Guillermo Prandi

1
正如David所说,一旦您将数据带入应用程序中,它将成为一个带有时间戳的DateTime。如果您将日期存储为字符串并使用Convert进行任何操作来转换为DateTime,则结果也将相同。
string date = "2015-11-17";
var dateTime = Convert.ToDateTime(date);

除非你想在应用程序中操作字符串以避免时间戳,否则只能使用 DateTime 进行操作。不过,为了显示的目的,你可以随时格式化日期并删除时间戳:

var dateTime = DateTime.Now;
var formatDate = dateTime.ToString("yyyy-MM-dd");

1

-2

将数据库中的数据类型从 Datetime 更改为 Date 类型

无论如何,这对您是否真的是一个问题?您可能在某个时候需要时间信息,


3
有特别的原因要踩吗?他想在数据库中仅存储日期,并且有一个名为“DATE”的数据类型可以完全实现这一点。 - Mark Homer

-3
将数据库中的DateTime更改为nvarchar(10) 如果您在数据库中使用DateTime,则数据库将自动分配00.00.00
string date = DateTime.Today.ToShortDateString();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接