Sql server 一次执行多个查询
我正在使用EntityFramework处理MS SQL数据库 在我的数据库中有表users和三个表A、B、C,其中包含用户数据。它们中的每一个都有行版本类型的列版本。更新行时,数据库正在用较大的数字更新此记录 用户正在向我发送其数据的版本-一个数字:userVersion。作为响应,我需要从这三个表向他发送数据,其中version高于userVersion。我可以使用三个查询来实现这一点:Sql server 一次执行多个查询,sql-server,database,entity-framework,Sql Server,Database,Entity Framework,我正在使用EntityFramework处理MS SQL数据库 在我的数据库中有表users和三个表A、B、C,其中包含用户数据。它们中的每一个都有行版本类型的列版本。更新行时,数据库正在用较大的数字更新此记录 用户正在向我发送其数据的版本-一个数字:userVersion。作为响应,我需要从这三个表向他发送数据,其中version高于userVersion。我可以使用三个查询来实现这一点: var listA = Entities.As.where(... && a.versi
var listA = Entities.As.where(... && a.version > userVersion).toList();
// 1
var listB = Entities.Bs.where(... && b.version > userVersion).toList();
// 2
var listC = Entities.Cs.where(... && c.version > userVersion).toList();
然后我需要向用户发送当前版本:
userVersion = Max(listA.Select(a => a.version).Max(),
listB.Select(b => b.version).Max(),
listC.Select(c => c.version).Max());
问题是,当我得到listA数据库时,它可以用更新版本的As和Bs进行更新。所以当我得到listB时,listB的版本比listA的版本更新
最终用户将获得如此高的userVersion,以至于他永远不会在查询中更新元素
示例我只写版本专栏
A={1,3,6,8},B={2,5,9},C={4,7},userVersion=3。
listA={6,8}。
现在执行另一个线程的另一个查询,将元素10添加到A,11添加到B,因此B={2,5,9,11}。
listB={5,9,11}。
listC={4,7}。
userVersion=11,用户将永远不会获得A的元素10。
有没有办法准备这三个查询,每个列表一个查询,然后立即执行它们,这样就不会在这三个查询之间进行更新或插入?我可以想到一个事务会阻止向As、Bs、Cs的写入。但这可能对性能非常不利。您是只需要最大值,还是还需要每个lis的内容?