仅在数据库中存储日期而不是时间部分C#

时间:2015-11-17 16:35:41

标签: c# entity-framework datetime sqldatatypes entity-framework-6.1

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

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

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

有没有办法只使用Entity Framework在db中存储日期时间部分?请帮帮我......

我在使用[DataType(DataType.Date)]时添加了快照,存储时间部分00:00我要删除

enter image description here

5 个答案:

答案 0 :(得分:30)

我认为您正在尝试指定数据库列类型。您可以使用this文章中描述的数据注释。

以下是一个例子:

$noOfcomment = DB::select("SELECT COUNT(comment) as cs FROM comments WHERE placeid='$pid->placeid'"); 
print_r($noOfcomment[0]->cs);

默认情况下,string被转换为nvarchar,我们在这里已经改变了。此外,默认情况下,在SQL Server中映射到数据时间的日期时间(这是您提出的问题)更改为[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; } } ,它仅存储日期部分而不存储date值的时间部分。 / p>

答案 1 :(得分:1)

正如David上面所说,一旦你将这些数据带入应用程序,它将是一个DateTime,并在日期中添加了时间戳。如果您将日期存储为字符串并使用转换更改为DateTime以进行任何操作,这也会产生相同的结果:

string date = "2015-11-17";
var dateTime = Convert.ToDateTime(date);

除非您想在应用程序中操作字符串以避免时间戳,否则您只能使用DateTime。但是出于显示目的,您始终可以格式化日期并删除时间戳:

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

答案 2 :(得分:1)

在EF内核上,可以在DbContext类中添加重写OnModelCreating。

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

答案 3 :(得分:0)

在数据库中将DateTime更改为nvarchar(10) 如果您在数据库00.00.00中使用DateTime将由数据库自动分配

string date = DateTime.Today.ToShortDateString();

答案 4 :(得分:-3)

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

无论如何,这真的是一个问题吗?你可能在某个时候想要时间,