EF 4.1 Code First SqlCe и DateTimeOffset - PullRequest
       40

EF 4.1 Code First SqlCe и DateTimeOffset

1 голос
/ 20 апреля 2011

У меня есть такой объект, как:

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 Ответ

2 голосов
/ 20 апреля 2011

Сохраните его в 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);
    }
}

...