entity framework – 将字段值更新为当前数据库服务器时间
我从数据库中撤回了一个实体对象,我需要将日期更新到数据库服务器的日期/时间 – 通常你可以通过使用SQL getDate()
函数来设置它。
如何在以下场景中完成此操作:
var client = context.client.Where(c=>c.clientID == 1).FirstOrDefault(); // the value needs to be the value of the server's current date, ie, getDate()... not DateTime.Now client.someDate = ; context.SaveChanges();
尝试插入以下内容代替示例中的第四行:
var dateQuery = context.CreateQuery("CurrentDateTime() "); client.SomeDate = dateQuery.AsEnumerable().First();
DateTime.Now将从您的服务器(Web服务器而不是数据库服务器)提供当前日期。 如果client.someDate是DateTime字段,那么您可以分配DateTime.Now并将其更新回数据库。
这是我在EF6 / MVC5 VB.NET应用程序中执行此操作的方法。
问题:使用一个查询返回getdate()
值,然后使用另一个查询来更新带有检索到的getdate()
值的记录是不可接受的恕我直言。 这是两个查询,只需要一个。 另外,返回的getdate()
值在写回来的时候在技术上并不准确,因为时间已经过去了。
解决方案:下面的代码段将单个可空日期时间字段更新为getdate()
的当前值,并返回更新的getdate()
值(如果不需要返回的值,只需删除OUTPUT INSERTED.theTime
段)。 所有这些都是在SQL查询中完成的。
Dim theTime As DateTime? = db.Database.SqlQuery(Of DateTime?) _ ("UPDATE myTable SET theTime = getdate() OUTPUT INSERTED.theTime WHERE someRecordID = @someRecordID", New SqlParameter("@someRecordID", someRecordID)).First()
似乎必须有一些更好的解决方案(或者这是MS的严重疏忽,在更新记录时不使用getdate()是一种常见且正确的做法吗?)。 如果有人能在评论或其他答案中指出更清洁的方法,我会很激动。
理想情况下,我希望能够这样说:
Dim craftBeer = context.CraftBeers.Find(id) ... (update other craftBeer properties) ... craftBeer.date_emptied = SqlServer.SqlFunction.GetDate context.Entry(craftBeer).State = EntityState.Modfied context.SaveChanges()
…但不幸的是,显然SqlServer.SqlFunctions.GetDate不能像这样使用EF。
我看到这是一个非常古老的问题,但我也有这个问题。 我刚刚想到你可以在SQL Server上创建一个只是RETURNS GETDATE()的标量函数。 然后在entity framework中,将该SQL函数拉入您的上下文中。 似乎有点做作,但我认为它会起作用。
也许为时已晚,但如果可以帮助某人,我就离开它了。我们可以从数据库服务器获取当前的日期时间,例如:
public DateTime GetDate() { var date = context.client.Select(c => DateTime.Now).First(); return date; }
所以我们使用的function:
var client = context.client.Where(c=>c.clientID == 1).FirstOrDefault(); client.someDate = GetDate(); context.client.Add(client);
- 如何在静态方法中访问下拉列表
- 如何从asp.net中的代码调用确认消息?
- AngularJS使用Asp.net Web API:$ http post返回XMLHttpRequest无法加载:预检的响应具有无效的HTTP状态代码405
- System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)拒绝访问
- 在运行时找不到的方法
- log4net没有记录和抛出错误
- 如何在wcf restful服务中传递多个参数?
- asp.net将类添加到当前menuItem
- Mono上的MVC 5:无法加载文件或程序集“System.Web.Entity”或其依赖项之一