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