EF、Linq查询/获取服务器时间

很多人做项目时候当喜欢用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();
     }
}

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值