我在我的 ASP.NET MVC 应用程序中使用 EF5 代码优先和基于代理的更改跟踪。我的一个域类包含一个非常频繁更新的数字属性。出于这个原因,这个属性没有使用框架持久化到数据库中:
public virtual int CurrentSessions
{
get
{
return _currentSessions;
}
set
{
Interlocked.Exchange(ref _currentSessions, value);
}
}
我面临的问题是属性的值不会跨会话更新。根据内部逻辑,我的 API 控制器要么增加上述值,要么减少它,如下所示:
myObj.CurrentSessions++;
或者
myObj.CurrentSessions--;
其中 myObj 是在每个会话中通过 LINQ 从上下文中检索的代理对象:
var myObj = objectContext.Instances<myPocoEntity>().FirstOrDefault(cb => cb.SomeProp == someValue);
当我在增加/减少 myObj.CurrentSessions 之后检查它的值时,它确实被更新了,但是在下一个服务器请求时,当 myObj 再次被检索时,CurrentSessions 始终具有其初始值,为零。
如何确保在 POCO 实体中更新属性值而不扫描整个上下文以进行更改?