1

我有这样一个实体:EF 4.1代码第一次SQLCE和的DateTimeOffset

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

..和再使用EF流利的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上使用这个工具有什么选择?

回答

2

将它保存在2个独立的领域,UtcEventDate和时区:


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

+0

很公平,有效的选项。想知道是否有其他选择。 – ozczecho 2011-04-20 08:47:42

+0

始终存在SQL Express,而不是CE。我打算建议为CE创建一个自定义的CLR类型,但发现这也不是支持。 – 2011-04-20 21:55:11

+1

: - )...我试图使用Sql CE的低影响(即不需要安装)。但我很快就发现它的严格限制。 – ozczecho 2011-04-21 01:34:43