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

问题描述 投票:8回答:4

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

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

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

entity-framework entity-framework-6 entity-framework-4
4个回答
13
投票

有没有理由你不能把它推到你的数据库?如果在实体查询中包含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]

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


9
投票

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

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

1
投票

.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; }
}

0
投票

在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

© www.soinside.com 2019 - 2024. All rights reserved.