EF:如何查询本地数据

时间:2013-02-25 11:55:19

标签: vb.net entity-framework

这是EF4。我有一个简单的问题。假设我向上下文对象添加了一些销售订单,如:

Dim NewOrder = context.SalesOrders.CreateObject()
NewOrder.Number= 123
context.SalesOrders.AddObject(NewOrder)

我还没有调用SaveChanges(),想要查看上下文中是否有使用Number = 123的订单:

context.SalesOrder.FirstOrDefault(Function(x) x.Number=123)

为什么世界上这个查询会返回Nothing?它是在搜索数据库而不是本地上下文对象吗?

2 个答案:

答案 0 :(得分:0)

Number是SalesOrder实体的主键吗?

如果是这样,你可以使用.Find(),因为它首先查询本地实体,然后只有在本地实体集合中找不到任何内容时才查询数据库:

context.SalesOrders.Find(number);

请注意,find只能接受主键而不能像其他LINQ操作那样接受lambdas。

答案 1 :(得分:0)

您可以通过对象状态管理器搜索本地实体:( C#语法,但VB.NET等效项对您来说应该是显而易见的)

context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Unchanged).Select(entry => entry.Entity).OfType<SalesOrder>()

这实际上也是DbSet.Local在幕后所做的事情。可能值得努力使其在您的上下文中作为通用辅助函数使用。