2010-04-06 17 views
7

Nie chcę, aby mój bieżący ModifeidDateTime był czasem maszynowym już na serwerze. Za każdym razem, gdy chcę zaktualizować lub dodać osobę do mojej bazy danych na SQL Server 2008, chcę wypełnić plik ModifiedDateTime. To nie tak, że mogę zmienić zapytanie o aktualizację, tak jak przy użyciu polecenia adaptera danych, gdy pracuję z zestawem danych i zdefiniować dla mojego pliku ModifiedDateTime wartość = GetDate(). Stworzyłem funkcję zapisaną do retutn mi wartość metody GetDate(), ale mam problem z procedurą importu, która zwraca wartości jako int, string ... lub nie ma wartości w ogóle, już tylko wartości encji jako Osoba na przykład w moim przypadku . Dlaczego? W każdym razie Byłoby bardzo pomocne, gdybyś mógł podać mi jakieś rozwiązanie, które działa w celu pobrania wartości DateTime z serwera.Jak zapytać serwer bazy danych o bieżącą datę i godzinę za pomocą struktury encji?

+0

Która wersja .NET i Visual Studio używasz? – bryanjonker

Odpowiedz

13

Czy istnieje powód, dla którego nie można go przenieść do bazy danych? Jeśli umieścisz DateTime.Now w kwerendzie encji, spowoduje to wypchnięcie go (getdate) do bazy danych.

Przykład LINQ do podmiotów

var dQuery = dbContext.CreateQuery<DateTime>("CurrentDateTime() "); 
DateTime dbDate = dQuery.AsEnumerable().First(); 

SQL Wygenerowane ..

SELECT GetDate() AS [C1] FROM (SELECT cast(1 as bit) AS X) AS [SingleRowTable1] 

może być lepszy sposób to zrobić?

+1

Działa to dobrze. Dowiedziałem się o tych funkcjach kanonicznych datetime, ale nie wiedziałem, jak z nich korzystać z kodu. Widziałem, że można ich używać w CSDL. Dzięki. Aktualizacja – Levelbit

+0

: nie ma już bezpośredniego dostępu do metody CreateQuery - należy ją najpierw rzucić - w ten sposób: var query = ((IObjectContextAdapter) dbContext) .ObjectContext.CreateQuery ("CurrentDateTime()"); –

0

W VS 2008, jeśli dodasz szablon funkcji, aby zwrócić skalar, to nie doda kodu, aby był łatwy w użyciu. Musisz uzyskać bezpośredni dostęp do szablonu funkcji - używam klasy cząstkowej do zbudowania potrzebnych metod dla łatwości użycia. Naprawili to w VS2010.

public DateTime GetDateTime() 
    { 
     var returnValue = new DateTime(); 
     using (var connection = new EntityConnection(Connection.ConnectionString)) 
     { 
      connection.Open(); 
      using (var command = connection.CreateCommand()) 
      { 
       command.CommandText = "myStoredProc"; 
       command.CommandType = CommandType.StoredProcedure; 
       try 
       { 
        returnValue = Convert.ToDateTime(command.ExecuteScalar()); 
       } 
       finally 
       { 
        connection.Close(); 
       } 
      } 
     } 
     return returnValue; 
    } 

Więcej informacji: Function Imports in Entity Model with a non-Entity Return Type

5

Jest to aktualizacja odpowiedzi @Nix do EF4:

var dateQuery = dbContext.Database.SqlQuery<DateTime>("SELECT getdate()"); 
DateTime serverDate = dateQuery.AsEnumerable().First(); 
Powiązane problemy