似乎在使用相同的Entity Framework上下文5-40小时后,实体停止加载相关对象。 (例如:Character.Items
为空)。在此问题之前加载的所有实体都很好,并且它们正确加载 - 它发生在从数据库而不是缓存加载的实体上。
我在游戏服务器项目中使用Entity Framework,其中上下文必须在整个持续时间内保持活动状态(否则上下文会丢失对象的跟踪)。服务器在单个线程中运行,所有与数据库相关的函数(例如加载字符数据,项,关系等)都在单独的数据库线程中完成(例如:Game.DbExecute(() => { ... })
)。每当加载具有关系的实体时,所有相关数据都加载到同一个DB线程中,并缓存在列表或字典中以供游戏线程稍后使用。平均而言,我们开始使用5,000个实体和50,000个非跟踪实体(主要是技能信息,怪物信息,项目信息等数据)。但是,在运行时,我们完全可以添加/使用50,000 - 100,000或更多实体,直到我们进行维护。
访问实体时唯一不使用数据库线程的是直接设置实体值 - 例如:Character.Name = "..."
;
这可能是我问题的根源,还是问题出在其他地方?还有其他人遇到过这个问题吗?