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