我正在使用Entity Framework 4.1。我已经使用大量的在线示例实现了一个基础知识库。我的存储库get方法使用bool参数来决定是否跟踪实体。有时,我想加载一个实体并在其他时间跟踪它,对于某些实体,我只想读取它们并显示它们(即在图中)。在这种情况下,永远不需要编辑,所以我不想追踪它们的开销。此外,图形实体被发送到Silverlight客户端,因此实体与上下文断开连接。因此,我的Get方法可以返回被跟踪或不跟踪的实体列表。这是动态创建查询所实现的,如下所示:是否可以判断一个实体是否被跟踪?
DbQuery<E> query = Context.Set<E>();
// Track the entities in the context?
if (!trackEntities)
{
query = query.AsNoTracking();
}
但是,我现在想要让用户与图形进行交互并对其进行编辑。这不会经常发生,所以我仍然想要一些实体没有跟踪它们,但有能力保存它们。为此,我只需将它们附加到上下文并将状态设置为已修改。一切工作到目前为止。
我正在通过重写SaveChanges方法来审计任何更改。正如上面所解释的,在一些较低的情况下,我可能需要保存已断开连接的已修改的实体。因此,为了进行审计,我必须从数据库中检索当前值,然后进行比较以确定断开连接时发生了什么变化。如果实体已被跟踪,则不需要获取旧值,因为我可以通过州政府经理访问它们。我没有使用自我跟踪实体,因为这对我的需求来说太过分了。
问题:在我的审计方法中,我只想知道修改的实体是否被跟踪,即是否需要转到db并获取原始值?
干杯
谢谢帕维尔 - 完美的工作! – rockshire