Pregunta

Tengo una entidad con una propiedad ModifiedDateTime que quiero ser actualizado con la fecha y hora actuales de la base de datos en lugar del servidor "aplicación" de ejecutar la aplicación.

Cada vez que quiera actualizar o agregar una persona a mi datebase en SQL Server 2008 Quiero llenar ModifiedDateTime presentada. No es como si pudiera cambiar consulta de actualización como con el comando adaptador de datos cuando trabajo con el conjunto de datos y definir para mi ModifiedDateTime presentó para ser GetDate (). Yo creé función almacenada me devolverá un valor de GetDate método (), pero tengo un problema con el procedimiento de importación que devuelve valores como int, cadena o ningún valor en absoluto, ya sólo valores de entidad como persona, por ejemplo, en mi caso. ¿Porqué es eso?

De todos modos, sería de gran ayuda si usted me puede ayudar a recuperar la fecha y hora actuales del servidor de base de datos.

¿Fue útil?

Solución

¿Hay alguna razón que no se puede empujar hacia abajo a su base de datos? Si incluye DateTime.Now en su consulta de entidad, se empuje hacia abajo (getdate) a la base de datos.

Ejemplo linq a entidades

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

SQL generado ..

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

Podría haber una mejor manera de hacerlo?

Otros consejos

Esta es una actualización de la respuesta a @Nix EF4:

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

Una actualización para núcleo .NET 2.0

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

La entidad falsa

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

En VS 2008, si se agrega una plantilla de función para devolver un escalar, no se le añade el código para que sea fácil de usar. Es necesario tener acceso a la plantilla de función directa - Yo uso la clase parcial para construir los métodos necesarios para facilitar su uso. Lo arreglaron esto en 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;
    }

Más información: en modelo de entidad con una no-entidad Tipo de retorno

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top