12

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

每次我想在 SQL Server 2008 上更新或添加一个人到我的数据库时,我都想填写 ModifiedDateTime 文件。当我使用数据集并将我的 ModifiedDateTime 文件定义为 GetDate() 时,我不能像使用数据适配器命令一样更改更新查询。我创建了存储函数来返回 GetDate() 方法的值,但是我在导入过程时遇到问题,该过程返回值作为 int、string 或根本没有值,在我的例子中已经只是实体值作为 Person。这是为什么?

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

4

5 回答 5

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]

可能是更好的方法吗?

于 2010-04-06T14:11:16.573 回答
12

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

var dateQuery = dbContext.Database.SqlQuery<DateTime>("SELECT getdate()");
DateTime serverDate = dateQuery.AsEnumerable().First();
于 2015-06-24T12:31:52.370 回答
3

.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; }
}
于 2019-02-21T10:05:10.213 回答
0

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

更多信息: 具有非实体返回类型的实体模型中的函数导入

于 2010-04-06T14:37:32.173 回答
0

英孚 3

var dual = await db
            .Set<Dual>()
            .FromSqlRaw(@"
                SELECT 
                    CURRENT_TRANSACTION_ID() as Id, 
                    SYSDATETIMEOFFSET() AS DateTime
            ")
            .FirstAsync();
DateTimeOffset serverTime = dual.DateTime;

public class Dual
{
    public long Id { get; set; }
    public DateTimeOffset DateTime { get; set; }
}

modelBuilder.Entity<Dual>(entity =>
{
    entity.HasNoKey();
    entity.ToView(nameof(Dual));
});
于 2020-08-05T14:10:49.113 回答