Domanda

Ho un soggetto con una proprietà ModifiedDateTime cui voglio essere aggiornato con il datetime corrente dal database invece del server di "applicazione" di eseguire l'applicazione.

Ogni volta che voglio aggiornare o aggiungere una persona alla mia datebase su SQL Server 2008 voglio riempire ModifiedDateTime archiviato. Non è che posso cambiare query di aggiornamento, come con il comando adattatore di dati quando lavoro con set di dati e di definire per la mia ModifiedDateTime archiviato per essere GetDate (). Ho creato la funzione memorizzata per restituire me un valore di GetDate () metodo, ma ho un problema alla procedura di importazione che restituisce i valori come int, stringa o alcun valore, già solo valori di entità come persona, per esempio nel mio caso. Perché?

In ogni caso, sarebbe di grande aiuto se mi può aiutare a recuperare il DateTime corrente dal server di database.

È stato utile?

Soluzione

C'è un motivo non si può spingere verso il basso al vostro database? Se si include DateTime.Now nella query entità, spingerà verso il basso (getdate) al database.

Esempio LINQ to entità

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

SQL generata ..

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

Potrebbe essere un modo migliore per farlo?

Altri suggerimenti

Questo è un aggiornamento di risposta @Nix a EF4:

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

Un aggiornamento per il core .net 2.0

var dual =  databaseContext
            .Set<Dual>()
            .FromSql("SELECT -1 AS Id, GETDATE() AS DateTime")
            .First();

L'entità falso

public class Dual
{
    public int Id { get; set; }
    public DateTime DateTime { get; set; }
}

In VS 2008, se si aggiunge un modello di funzione per restituire uno scalare, non aggiunge il codice per rendere più facile da utilizzare. È necessario accedere direttamente alla funzione di modello - io uso la classe parziale per costruire i metodi necessari per la facilità d'uso. Lo hanno risolto questo in 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;
    }

Più informazioni: Le importazioni in funzione dell'entità del modello con una non-entità ritorno Tipo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top