我有一个测试类和一个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我要删除
答案 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
类型
无论如何,这真的是一个问题吗?你可能在某个时候想要时间,