“Simultaneous"使用Linq插入缺少的和日志条目

本文关键字:日志 插入 Simultaneous quot Linq 使用 | 更新日期: 2023-09-27 18:11:29

在计时我们的代码时,我注意到每次Linq与SQL Server通信时都有大量的事务时间。在过去,当我们直接使用SQL时,我们可以放置多条语句并一次发送。在Linq中有办法做到这一点吗?特别是,我有两个表,一个Log表和一个UHAs (userhostaddress)表。如果uha尚未在UHAs表中,则必须插入它,然后使用uhaid创建Log条目。在Linq中,这需要三个调用,一次用于验证uha不存在,一次用于插入它,一次用于记录日志。我能在对数据库的一次调用中做到这一点吗?

    var uha = db.UHAs.Where(u => u.userhostaddress == _userHostAddress).FirstOrDefault();
    if (uha == null)
    {
        var newUha = new UHA()
        {
            userhostaddress = _userHostAddress
        };
        db.UHAs.InsertOnSubmit(newUha);
        db.SubmitChanges();     // 2. Second call
        uha = newUha;
    }
    SHA1 sha1 = SHA1.Create();
    var newLog= new Log()
    {                    
        requested = DateTime.UtcNow,
        uhaid = uha.uhaid,
        query = _query,
        queryhash = sha1.ComputeHash(Encoding.UTF8.GetBytes(_query))
    };
    db.Log.InsertOnSubmit(newLog);
    db.SubmitChanges();

“Simultaneous"使用Linq插入缺少的和日志条目

由于使用的是数据上下文的相同实例,因此只需要调用一次SubmitChanges()。这将一次执行所有命令,而不是多次访问sql server。