Pergunta

Eu tenho uma entidade com uma propriedade ModifiedDateTime que eu quero ser atualizada com o datetime atual do banco de dados em vez do servidor "Aplicativo" executando o aplicativo.

Toda vez que eu quero atualizar ou adicionar uma pessoa à minha base no SQL Server 2008, quero preencher o ModifiedDateTime Filmed. Não é como se eu pudesse alterar a consulta de atualização como no comando adaptador de dados quando eu trabalho com o conjunto de dados e para definir para o meu modificado DateTime arquivado para ser getDate (). Criei função armazenada para me retornar um valor do método getDate (), mas tenho um problema para importar procedimento que retorne valores como int, string ou nenhum valor, já apenas valores de entidade como pessoa, por exemplo, no meu caso. Por que é que?

De qualquer forma, seria de grande ajuda se você pudesse me ajudar a recuperar o datetime atual do servidor de banco de dados.

Foi útil?

Solução

Existe uma razão pela qual você simplesmente não pode empurrá -lo para o seu banco de dados? Se você incluir o DateTime.Now em sua consulta de entidade, ele o empurrará para baixo (getDate) para o banco de dados.

Exemplo Linq para entidades

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

SQL gerado ..

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

Pode ser uma maneira melhor de fazer isso?

Outras dicas

Esta é uma atualização da resposta @nix ao EF4:

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

Uma atualização para .NET Core 2.0

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

A entidade falsa

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

No VS 2008, se você adicionar um modelo de função para retornar um escalar, ele não adicionará o código para facilitar o uso. Você precisa acessar diretamente o modelo de função - eu uso a classe parcial para criar os métodos necessários para facilitar o uso. Eles consertaram isso no 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;
    }

Mais Informações:Importações de funções no modelo de entidade com um tipo de retorno não-entidade

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top