sqlite 数据库中的 EntityFramework 核心格式 DateTime

Bla*_*rix 5 c# database datetime entity-framework-core ef-core-2.0

我正在将 EF Core 2.0 与 SQLite 一起使用,并且我想在不丢失表列中人类可读的日期时间值的情况下减小数据库的大小。目前,数据上下文将完整的 DateTime CLR 对象存储为像“2018-03-10 16:18:17.1013863”这样的字符串,但在我的情况下,“2018-03-10 16:18:17”就足够了。我必须做什么?

bri*_*lam 4

如果秒的小数部分为零,则不会存储它们。您可以安全地将它们从现有数据中删除。更新您的应用程序以不指定它们。您可以急切地(当您DateTime在实体上设置值时)或在SaveChanges.

public override int SaveChanges()
{
    var dateTimeProperties =
        from e in ChangeTracker.Entries()
        where e.State == EntityState.Added
                || e.State == EntityState.Modified
        from p in e.Properties
        where p.CurrentValue is DateTime
        select p;
    foreach (var property in dateTimeProperties)
    {
        // Strip millisecond
        var value = (DateTime)property.CurrentValue;
        property.CurrentValue = new DateTime(
            value.Year,
            value.Month,
            value.Day,
            value.Hour,
            value.Minute,
            value.Second);
    }

    return base.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

  • 2.1 版将允许用于此目的的[值转换](https://learn.microsoft.com/en-us/ef/core/modeling/value-conversions)。 (2认同)