在我们的代码计时中,我注意到每次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();
答案 0 :(得分:0)
由于您使用的是数据上下文的相同实例,因此只需调用SubmitChanges()一次。这将立即执行所有命令,而不是多次访问sql server。