我有一个视图ObjectDisplay
,它由两个相关的表格组成:Object
和State
。 State
代表Object
的状态,并且该视图从最近的State
中为每个Object
提取一些细节。视图是否立即反映其基础表中的数据更改?
在显示此信息的页面上,用户可以输入一些注释,它会创建一个新的State
。在创建新的State
后,我立即从ObjectDisplay
中取出Object
,然后将其发回并放入局部视图中,并替换页面上的网格中的Object
。
// Add new State.
db.States.Add(new State()
{
ObjectId = objectId,
Comments = comments,
UserName = username
});
// Save the changes (executes all of the above).
db.SaveChanges();
// Return the new Object information.
return db.Objects.Single(c => c.ObjectId == objectId);
根据我的分贝跟踪,该Single
呼叫发生SaveChanges
呼叫后约70毫秒,它发生在同一个SPID。
现在是问题:数据库默认我看到返回的RecordDate
的值在State
到GETUTCDATE()
- 我自己没有提供日期。我看到的是Object
返回的旧State
的State
的RecordDate
和旧的State
的新State
信息的Comments
。Object
有旧的State
的信息。当我刷新页面时,所有正确的信息都在那里,但是在数据库/ EF的初始调用中返回了错误的信息。
那么..什么可能是错的?该视图能否更新得足够快? EF可能会发生什么?我真的不知道从哪里开始寻找。
什么隔离级别的查询与运行?是否在不同的会话上调用视图来更改数据? – Oded 2013-03-21 21:01:58
@Oded:从跟踪中,'Audit Login'行有'set transaction isolation level read committed'。两者都在同一个SPID中完成。 – zimdanen 2013-03-21 21:03:56