Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Entity framework 6 - datum u UTC

[es] :: .NET :: Entity framework 6 - datum u UTC

[ Pregleda: 1603 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vujkev
Beograd

Član broj: 8072
Poruke: 1347
*.dynamic.isp.telekom.rs.



+104 Profil

icon Entity framework 6 - datum u UTC14.06.2014. u 11:56 - pre 119 meseci
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.
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
*.dynamic.isp.telekom.rs.



+104 Profil

icon Re: Entity framework 6 - datum u UTC14.06.2014. u 14:57 - pre 119 meseci
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?
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

[es] :: .NET :: Entity framework 6 - datum u UTC

[ Pregleda: 1603 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.