如何在Entity .NET Core 2.1中使用Fluid API设置字段为date类型
解决Entity Framework映射SQL Server特定日期时间类型的问题
别担心,用EF的Fluent API完全可以轻松覆盖默认的字段类型,把你的datetime字段分别映射成SQL Server的date和time类型,我给你具体的实现步骤:
1. 映射到SQL Server的date类型(仅日期,无时间)
假设你的Model类是这样的:
public class YourEntity { public int Id { get; set; } // 这个字段你想存纯日期 public DateTime DateOnlyField { get; set; } // 其他字段... }
在你的DbContext的OnModelCreating方法里,针对这个字段添加Fluent API配置:
protected override void OnModelCreating(ModelBuilder modelBuilder) { // 把DateOnlyField映射为SQL Server的date类型 modelBuilder.Entity<YourEntity>() .Property(e => e.DateOnlyField) .HasColumnType("date"); }
这样EF生成的数据表中,DateOnlyField字段就会是date类型,只存储年月日,没有时间部分。
2. 映射到SQL Server的time类型(仅当日时间)
同样,先看你的Model字段:
public class YourEntity { // ...其他字段 // 这个字段你想存纯时间 public DateTime TimeOnlyField { get; set; } }
继续在OnModelCreating里添加配置:
modelBuilder.Entity<YourEntity>() .Property(e => e.TimeOnlyField) .HasColumnType("time");
默认情况下,SQL Server的time类型精度是7(纳秒级),如果需要指定精度(比如毫秒级),可以写成HasColumnType("time(3)")。
通用说明
不管是EF Core还是EF6,这个HasColumnType方法都适用,它允许你直接指定SQL Server的原生字段类型,完美覆盖EF的默认映射规则。后续你要配置时间时长字段,也可以用同样的思路,只要把对应的SQL类型字符串传给HasColumnType就行。
内容的提问来源于stack exchange,提问作者user1489765
相关产品推荐
相关产品推荐

