Sqlite不支持datetime類型的數(shù)據(jù)昼接,我們一般用Text或者Numeric來存儲這個數(shù)據(jù)類型屑柔,在編程的時候感覺頗為不便联贩,經研究可以通過下面的步驟讓它運行日期類型歹茶。
- 在使用
Scaffold-DbContext
命令在項目中生成了Sqlite數(shù)據(jù)庫上下文和模型后先匪,對于使用Text數(shù)據(jù)類型存儲日期時間的(使用Numeric的不需要做這一步)种吸,在數(shù)據(jù)庫的上下文文件里的OnModelCreating進行改進如下,要點在最后面的6行:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<SqliteBlockedIp>(entity =>
{
entity.ToTable("SqliteBlockedIP");
entity.HasIndex(e => e.Id, "Index_ID").IsUnique();
entity.Property(e => e.Id).HasColumnName("ID");
entity.Property(e => e.Ipaddress).HasColumnName("IPAddress");
//added by Darwin Zuo for DateTime conversion專為數(shù)據(jù)轉換而添加
entity.Property(e => e.BlockedTime).HasConversion
(
v => v.ToString("yyyy-MM-dd HH:mm:ss"), // 從DateTime到string的轉換
v => DateTime.ParseExact(v, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture) // 從string到DateTime的轉換
);
});
......
}
- 找到模型文件的對應字段的屬性胚鸯,我這里是BlockedTime骨稿,它原來是如下這樣的
public string BlockedTime { get; set; } = null!;
或者public byte[]? BlockedTime { get; set; }
把它改成這樣:
public DateTime BlockedTime { get; set; } = DateTime.MinValue!;
然后編譯程序 ,屬性BlockedTime就直接成為DateTime類型了姜钳。
注意:以上內容在使用Scaffold-DbContext
刷新上下文和模型后坦冠,需要再次添加和修改!哥桥!