如何使用实体框架向数据库服务器询问当前日期时间?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用实体框架向数据库服务器询问当前日期时间?相关的知识,希望对你有一定的参考价值。

我有一个具有ModifiedDateTime属性的实体,我想用数据库中的当前日期时间而不是执行应用程序的“应用程序”服务器更新。

每次我想在SQL Server 2008上更新或添加人员到我的数据库时,我想填写ModifiedDateTime字段。当我使用数据集并为我的ModifiedDateTime定义为GetDate()时,我不能像使用数据适配器命令那样更改更新查询。我创建了存储函数来返回一个GetDate()方法的值,但是我有一个问题就是导入过程,它返回值为int,string或者根本没有值,只是实体值为Person,例如在我的情况下。这是为什么?

无论如何,如果你能帮助我从数据库服务器中检索当前的DateTime,那将会很有帮助。

答案

有没有理由你不能把它推到你的数据库?如果在实体查询中包含DateTime.Now,它会将其(getdate)推送到数据库。

示例linq到实体

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

SQL生成..

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

这可能是一个更好的方法吗?

另一答案

这是对EF4的@Nix响应的更新:

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

.net core 2.0的更新

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

假实体

public class Dual
{
    public int Id { get; set; }
    public DateTime DateTime { get; set; }
}
另一答案

在VS 2008中,如果添加函数模板以返回标量,则不会添加代码以使其易于使用。您需要直接访问函数模板 - 我使用partial类来构建易于使用的所需方法。他们在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;
    }

更多信息:Function Imports in Entity Model with a non-Entity Return Type

以上是关于如何使用实体框架向数据库服务器询问当前日期时间?的主要内容,如果未能解决你的问题,请参考以下文章

实体框架获取当前日期行(当天的时间)

如何使用实体查询框架对以下查询进行建模

如何在条件下使用实体框架组日期而不是时间日期和总和

如何更改实体框架为日期时间生成 SQL 精度的方式

实体框架 - SQL Server 2005 - IIS 服务器日期时间问题

实体框架在不询问的情况下填充子实体[重复]