EF 4.1 Code First SqlCe和DateTimeOffset

时间:2011-04-20 04:18:16

标签: c# entity-framework sql-server-2008 entity-framework-4.1 sql-server-ce-4

我有一个像:

这样的实体
public class EventItem 
{
    public int Id { get; set; }
    public int Vn { get; set; }
    public DateTimeOffset EventDate { get; set; }
    ...
}

..然后使用EF fluent API构建db:

    public class EventItemConfiguration : EntityTypeConfiguration<EventItem>
    {
        public CatalystItemConfiguration()
        {
            ToTable("events");
            HasKey(key => key.Id);

            Property(item => item.Id).HasColumnName("event_id").HasColumnType("int");
            Property(item => item.Vn).HasColumnName("event_vn").HasColumnType("int").IsRequired().IsConcurrencyToken();
Property(item => item.EventDate).HasColumnName("event_date").HasColumnType("datetimeoffset").IsRequired();
....
        }
}

现在这一切都在与SQL 2008交谈时。对于测试,我使用SQL CE 4.0,因为Sql CE不支持datetimeoffset,所以上面的代码都在堆中。

我有什么选择让它适用于Sql 2008和Sql CE?

1 个答案:

答案 0 :(得分:2)

将其保存在2个单独的字段中:UtcEventDate和TimeZone:


public class EventItem 
{
    public int Id { get; set; }
    public int Vn { get; set; }
    public DateTime UtcEventDate { get; set; }
    public string TimeZone { get; set; }
    ...

    public DateTime GetLocalTime()
    {
        TimeZoneInfo tzInfo = TimeZoneInfo.FindSystemTimeZoneById(this.TimeZone);
        return TimeZoneInfo.ConvertTimeFromUtc(this.UtcEventDate, tzInfo);
    }
}