Mam stare zapytanie, które wygląda
UPDATE table1 SET date_time_field = NOW() + INTERVAL 5 MINUTE WHERE ...;
Jak mogę zrobić to samo w EF? Nie mogę napisać
....
table1_entity.date_time_field = DateTime.Now + TimeSpan.FromMinutes(5);
ponieważ aplikacja i serwer DB mogą korzystaćróżne strefy czasowe. Czy można osiągnąć tę funkcjonalność bez natywnych zapytań (co jest moim obecnym podejściem, ale mi się nie podoba)? Dzięki.
Odpowiedzi:
2 dla odpowiedzi № 1Dodaj powyższą metodę do klasy datacontext, aby uzyskać czas serwera db:
[Function(Name="GetDate", IsComposable=true)]
public DateTime GetSystemDate()
{
MethodInfo mi = MethodBase.GetCurrentMethod() as MethodInfo;
return (DateTime)this.ExecuteMethodCall(this, mi, new object[]{}).ReturnValue;
}
Wyodrębniono z tego postu:
Entity Framework - zaktualizuj wartość pola do bieżącego czasu serwera DB
1 dla odpowiedzi nr 2
Jednym z podejść jest zastąpienie DateTime.Now
z a GetServerDatetime()
zadzwoń i użyj strefy czasowej serwera. Innym jest przechowywanie strefy czasowej.
W przeszłości robiłem pamięć podręczną przesuwanego okna (15 minut) czasu serwera (tj. Co 15 minut czas serwera jest sprawdzany i zapisywany lokalnie)