如果缺少“Simultaneous”插入并使用Linq进行日志输入

时间:2011-10-14 16:25:16

标签: c# sql linq

在我们的代码计时中,我注意到每次Linq与SQL Server通信时都会有大量的事务时间。过去,当我们直接使用SQL时,我们可以放置多个语句并立即发送。在Linq有办法做到这一点吗?特别是,我有两个表,一个Log表和一个UHA(userhostaddress)表。如果uha不在UHA表中,则必须插入,然后使用uhaid进行日志条目。在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();

1 个答案:

答案 0 :(得分:0)

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