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