[ vujkev @ 14.06.2014. 11:56 ] @
Kako najlakše implementirati da se svi datumi u EF6 snimaju kao UTC vreme?
Mogao bih da za svaki entity lično postavim datum sa ToUniversalTime(), ali mi to deluje suviše komplikovano i podložno greškama.
Postoji li neki centralizovani način da se svi datumi snime i čitaju kao UTC vremena?

Poz.
[ vujkev @ 14.06.2014. 14:57 ] @
Našao sam rešenje, ali me zanima koliko će ovo usporiti aplikaciju

Code (csharp):

public class DBContext : EFEntities
    {
        public DBContext()
            : base()
        {

            ((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized += ObjectContext_ObjectMaterialized;
            ((IObjectContextAdapter)this).ObjectContext.SavingChanges += ObjectContext_SavingChanges;

        }

        private void ObjectContext_SavingChanges(object sender, EventArgs e)
        {
            ObjectContext context = sender as ObjectContext;
            if (context != null)
            {
                foreach (ObjectStateEntry entry in
                              context.ObjectStateManager.GetObjectStateEntries(
                              EntityState.Added | EntityState.Modified))
                {

                    foreach (var item in entry.Entity.GetType().GetProperties())
                    {
                        if (item.PropertyType == typeof(DateTime))
                        {
                            DateTime date = (DateTime)item.GetValue(entry.Entity);
                            date = date.ToUniversalTime();
                            item.SetValue(entry.Entity, date);
                            continue;
                        }

                        if (item.PropertyType == typeof(Nullable<DateTime>))
                        {
                            Nullable<DateTime> date = (DateTime)item.GetValue(entry.Entity);
                            if (date.HasValue)
                            {
                                date = date.Value.ToUniversalTime();
                                item.SetValue(entry.Entity, date);
                            }
                        }
                    }
                }
            }
        }

        private void ObjectContext_ObjectMaterialized(object sender, System.Data.Entity.Core.Objects.ObjectMaterializedEventArgs e)
        {
            foreach (var item in e.Entity.GetType().GetProperties())
            {
                if (item.PropertyType == typeof(DateTime))
                {
                    DateTime date = (DateTime)item.GetValue(e.Entity);
                    date = DateTime.SpecifyKind(date, DateTimeKind.Utc);
                    item.SetValue(e.Entity, date);
                    continue;
                }

                if (item.PropertyType == typeof(Nullable<DateTime>))
                {
                    Nullable<DateTime> date = (DateTime)item.GetValue(e.Entity);
                    if (date.HasValue)
                    {
                        date = DateTime.SpecifyKind(date.Value, DateTimeKind.Utc);
                        item.SetValue(e.Entity, date);
                    }
                }
            }
        }
    }


Rešenje je da prilikom snimanja u bazu prolazim kroz sve property-e svih entity-a i ukoliko je isti tipa DateTime ili Nullable<DateTime> snimam UTC vrednost datuma.
Sa druge strane kad čitam samo postavljam da je tip pročitanog datuma UTC.

Postoji li neko bolje rešenje?