1

我有一个像这样的实体:

public class EventItem 
{
    public int Id { get; set; }
    public int Vn { get; set; }
    public DateTimeOffset EventDate { get; set; }
    ...
}

..然后使用 EF fluent API 构建数据库:

    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?

4

1 回答 1

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);
    }
}

于 2011-04-20T07:35:55.187 回答