我使用EntityFramework
来处理MS SQL
数据库。
在我的数据库中,我有表users
和三个表A
,B
,C
包含用户数据。它们中的每一个都具有version
类型的row-version
列(当更新行时,数据库正在使用更大的数字更新此记录)。
用户正在向我发送他的数据版本 - 一个号码:userVersion
。作为回复,我需要从version
高于userVersion
的这三个表中向他发送数据。我可以使用三个查询来执行此操作:
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
这么高,以至于他永远不会在" query
"
示例(我只写version
列)
{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
,用户永远不会获得10
的元素A
。有没有办法准备这三个查询(每个列表一个),并且它们一次执行它们,所以不会进行任何更新或插入?