我有两个应用程序:一个应用程序是asp.net,另一个是在后台运行的Windows服务。EF数据库并发
在后台运行的windows服务正在执行一些数据库任务(读取和更新),而用户可以通过asp.net应用程序对数据库执行其他操作。所以,我很担心它,例如,在窗口服务,我收集了一些记录满足条件的,然后我在它们之间迭代,是这样的:
IQueryable<EntityA> collection = context.EntitiesA.where(<condition>)
foreach (EntityA entity in collection)
{
// do some stuff
}
所以,如果用户修改在以后使用记录循环迭代,EF考虑的记录是什么值?原始检索时执行:
context.EntitiesA.where(<condition>)
或新的一个由用户修改并位于数据库?
据我所知,迭代过程中,EF被采取在需求每条记录,我的意思是,一个接一个,所以读取下一个记录为下一次迭代时,这个记录对应于从收集:
context.EntitiesA.where(<condition>)
或位于数据库(用户刚刚修改的那个)?
谢谢!
EF上枚举使用延迟加载。所以,当你调用foreach时,集合将被枚举。这意味着EF会在那个时候调用数据库。这意味着如果枚举已经开始,并且记录通过网站更新,那么在foreach循环中使用的记录将是旧版本或“原始检索”,如你所说。 – RollemIra
@RollemIra你所描述的称为'延期执行'。延迟加载与第一次访问时加载的导航属性有关。 –
好抓!标记它你会怎么做,直到枚举才会被执行。 – RollemIra