在数据库中只存储日期而不是时间部分 C#
store only date in database not time portion C#
我有一个测试 class 和一个 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
类型
这对你来说真的是个问题吗?您可能需要时间在那里,
正如大卫在上面所说的那样,一旦您将该数据带入应用程序,它将是一个 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");
将数据库中的日期时间更改为 nvarchar(10)
如果您在数据库中使用 DateTime 00.00.00 将由数据库自动分配
string date = DateTime.Today.ToShortDateString();
我认为您正在尝试指定数据库列类型。您可以使用 this 文章中所述的数据注释。
这是一个例子:
[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; }
}
默认情况下,string 被转换为 nvarchar,我们已在此处进行了更改。此外,默认情况下映射到 sql 服务器中的数据时间的日期时间(我想这就是你问的)更改为 date
,它仅存储日期部分而不存储 [=12= 的时间部分]值。
在 EF 核心上,可以在 DbContext 中添加覆盖 OnModelCreating class。
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Test>().
Property(p => p.ExecutionDate)
.HasColumnType("date");
}
在 .NET 6 中,您现在有了新的特殊类型 - DateOnly
更多信息在这里:
https://github.com/dotnet/efcore/issues/24507
https://www.stevejgordon.co.uk/using-dateonly-and-timeonly-in-dotnet-6
我有一个测试 class 和一个 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
类型
这对你来说真的是个问题吗?您可能需要时间在那里,
正如大卫在上面所说的那样,一旦您将该数据带入应用程序,它将是一个 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");
将数据库中的日期时间更改为 nvarchar(10) 如果您在数据库中使用 DateTime 00.00.00 将由数据库自动分配
string date = DateTime.Today.ToShortDateString();
我认为您正在尝试指定数据库列类型。您可以使用 this 文章中所述的数据注释。
这是一个例子:
[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; }
}
默认情况下,string 被转换为 nvarchar,我们已在此处进行了更改。此外,默认情况下映射到 sql 服务器中的数据时间的日期时间(我想这就是你问的)更改为 date
,它仅存储日期部分而不存储 [=12= 的时间部分]值。
在 EF 核心上,可以在 DbContext 中添加覆盖 OnModelCreating class。
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Test>().
Property(p => p.ExecutionDate)
.HasColumnType("date");
}
在 .NET 6 中,您现在有了新的特殊类型 - DateOnly
更多信息在这里: https://github.com/dotnet/efcore/issues/24507 https://www.stevejgordon.co.uk/using-dateonly-and-timeonly-in-dotnet-6