很多人做项目时候当喜欢用DateTime方法来做服务器时间直接写入了数据库,不得不说这是非常错误的,有些用户的电脑自己会把自己的电脑时间改了忘记了改回正确的时间,或者有用户的电脑很老很旧主板的电池已经坏了,每次开机时间都是主板出厂的默认时间,这个时候用DateTime只有给自己和团队添加麻烦,报表永远都不对,所以很有必要所有的时间统一使用服务器的时间。
如果是用ADO.NET就很方便,Sql直接用GetDate()就解决了,但是Linq好像没有这一个函数,或者有,只是我不知道(请原谅我只是一头刚发芽的小菜),那么Linq用什么方式来解决这个问题呢?
亲测可以正确获取
1、第一种方式:用EF(写在Lambda或者Linq里)执行SQL语句(运行报错),只能单独来执行
var serverDateTime = ctx.Database.SqlQuery<DateTime>("Select GetDate()").FirstOrDefault();
第二种方式:SqlFunctions.GetDate() ,
这种方式可以直接写在Lambda或者Linq里,并且在程序运行时生成的SQL语句是GetDate(),因此推荐使用这种方式
第三种方式是从百度搜索来的方法,不知道能不能获取得到
1、单独写一条Linq来获取服务器时间:
var serverDateTime=ctx.Set<ActivationInfoModel>().Select(s => DateTime.Now).First();
2、在更新Model的DateTime字段=serverDateTime,这时添加到数据库里的时间就是当前服务器的时间了.
参考代码:
public partial class DemoDBEntities : DbContext
{
public DemoDBEntities()
: base("name=DemoDBEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<DemoModel> DemoModel { get; set; }
}
public static void Update_IsBuy(int id)
{
using (var ctx = new DemoDBEntities())
{
//获取服务器当前时间
var serverDateTime = ctx.Database.SqlQuery<DateTime>("Select GetDate()").FirstOrDefault();
var result =(from a in ctx.DemoModel
where a.ID == id
select a).FirstOrDefault();
result.IsBuy = true;
result.BuyTime = serverDateTime;
ctx.SaveChanges();
}
}