2010-12-28 8 views
0

Ich habe eine alte Abfrage, dieUpdate-Objekt in EF

UPDATE table1 SET date_time_field = NOW() + INTERVAL 5 MINUTE WHERE ...; 

aussieht Wie kann ich das gleiche in EF tun? Ich kann nicht

.... 
table1_entity.date_time_field = DateTime.Now + TimeSpan.FromMinutes(5); 

schreiben, da die Anwendung und der DB-Server verschiedene Zeitzonen verwenden können. Ist es möglich, diese Funktionalität ohne native Abfragen zu erreichen (was ist mein aktueller Ansatz, aber ich mag ihn nicht wirklich)? Danke.

Antwort

2

Fügen Sie das obige Verfahren zu Ihrer Datacontext Klasse der DB-Server Zeit zu bekommen:

[Function(Name="GetDate", IsComposable=true)] 
public DateTime GetSystemDate() 
{ 
    MethodInfo mi = MethodBase.GetCurrentMethod() as MethodInfo; 
    return (DateTime)this.ExecuteMethodCall(this, mi, new object[]{}).ReturnValue; 
} 

von diesem Posten ausgezogen:

Entity Framework - update field value to current DB server time

+0

Danke, ich werde es versuchen – a1ex07

+0

diese Lösung funktioniert für Linq zu SQL, nicht Entity Framework! Für EF Equivalent siehe: http://stackoverflow.com/questions/683496/getdate-using-entity-framework – surfen

1

Ein Ansatz besteht darin, DateTime.Now durch einen GetServerDatetime() Aufruf zu ersetzen und die Zeitzone des Servers zu verwenden. Ein anderer ist die Zeitzone zu speichern.

Was ich in der Vergangenheit getan haben, ist ein Schiebefenster-Cache (15 Minuten) von der Serverzeit erstellen (dh alle 15 Minuten wird die Serverzeit abgefragt und lokal gespeichert)

+0

Wie erhalte ich 'Server'? Tut mir leid, wenn es eine dumme Frage ist, bin ich mit EF ziemlich unerfahren. – a1ex07

+0

@ a1ex07 : das war rein figurativ. Erstellen Sie eine Methode wie von @ShahidAzim gezeigt –

+0

Ok, ich verstehe. Danke für deine Antwort. – a1ex07