.NET 类中的编号DateTimeOffset
将映射到DateTimeOffset
SQL 类型。您不能直接更改此行为,因为 EF 不提供简单的类型转换/映射。如果你想存储它,DateTime
你必须破解它。
首先定义 Customer 类,使用技巧将私有属性暴露给本文中@cincura.net 引用的映射:
public class Customer
{
public static class CustomerExpressions
{
public static readonly Expression<Func<Customer, DateTime>> LastModifiedOn = c => c.LastModifiedOnInternal;
}
// Other properties
public DateTimeOffset LastModifiedOn
{
get { return new DateTimeOffset(LastModifiedOnInternal); }
set { LastModifiedOnInternal = value.DateTime; }
}
private DateTime LastModifiedOnInternal { get; set; }
}
现在您有两个属性 - 一个是私有的,DataTime
并且您希望将其保存到数据库中,另一个是为您的应用程序公开公开DateTimeOffset
的。在您的上下文中定义它:
public class Context : DbContext
{
public DbSet<Customer> Customers { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>().Ignore(c => c.LastModifiedOn);
modelBuilder.Entity<Customer>().Property(Customer.CustomerExpressions.LastModifiedOn).HasColumnName("LastModifiedOn");
}
}
无论如何,为什么不DateTime
直接使用并将其存储在 UTC 中?