Нет. DateTimeOffset
в классе .NET будет соответствовать 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?