DateTimeOffset
.NET クラスのNo.はDateTimeOffset
SQL 型にマップされます。EF は単純な型変換/マッピングを提供しないため、この動作を直接変更することはできません。保存したい場合は、DateTime
ハッキングする必要があります。
最初に、この投稿で @cincura.net によって参照されるマッピングにプライベート プロパティを公開するトリックを使用して Customer クラスを定義します。
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; }
}
これで、2 つのプロパティができました。1 つはプライベートで、DataTime
データベースに永続化する保持であり、もう 1 つは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に保存しないのはなぜですか?